R 距离矩阵

R 距离矩阵,r,matrix,distance,R,Matrix,Distance,我试图确定一个数据集中每个点与R中另一个数据集中每个点之间的距离。每个数据集都有一个X和Y参数。我一直在将数据集转换为数据帧,并寻找距离。但是,我当前的代码创建了一个大型矩阵,因为它将数据集列和行都列出。然后,我需要确定我关心的矩阵的一个特定部分,以获得我的答案,是否有一种方法可以将DSA作为列,将DSB作为行。这会将矩阵切割成1/4,因为我的数据集包含数千个点,每个点都会真正缩短算法运行的时间 这是我正在使用的代码 tumor<-data.frame(DSA[,c ("X_Paramet

我试图确定一个数据集中每个点与R中另一个数据集中每个点之间的距离。每个数据集都有一个X和Y参数。我一直在将数据集转换为数据帧,并寻找距离。但是,我当前的代码创建了一个大型矩阵,因为它将数据集列和行都列出。然后,我需要确定我关心的矩阵的一个特定部分,以获得我的答案,是否有一种方法可以将DSA作为列,将DSB作为行。这会将矩阵切割成1/4,因为我的数据集包含数千个点,每个点都会真正缩短算法运行的时间

这是我正在使用的代码

tumor<-data.frame(DSA[,c ("X_Parameter","Y_Parameter")])
cells<-data.frame(DSB[,c ("X_Parameter","Y_Parameter")])
distances<-as.matrix(dist(rbind(tumor,cells)))
row.start<-nrow(tumor)+1
row.end<-nrow(tumor)+nrow(cells)
col.start<-1
col.end<-nrow(tumor)
distances[row.start:row.end, col.start:col.end]
d<- distances[row.start:row.end, col.start:col.end]

tumorTry
flexclust::dist2

n_tumor = 2000
n_cells = 2000
tumor = matrix(runif(n_tumor * 2), n_tumor, )
cells = matrix(runif(n_cells * 2), n_cells, )

t_dist = system.time({
  distances<-as.matrix(dist(rbind(tumor,cells)))
  row.start<-nrow(tumor)+1
  row.end<-nrow(tumor)+nrow(cells)
  col.start<-1
  col.end<-nrow(tumor)
  d <- distances[row.start:row.end, col.start:col.end]
})[3]

require(flexclust)
t_dist2 = system.time({d2 = dist2(x = cells, y = tumor, method = "euclidean")})[3]

t_dist # 1.477
t_dist2 # 0.244
identical(unname(d), d2) # TRUE
n_肿瘤=2000
n_单元=2000
肿瘤=基质(runif(n_肿瘤*2),n_肿瘤,)
单元格=矩阵(runif(n个单元格*2),n个单元格,)
t_dist=系统时间({

距离这将仅计算所需矩阵的部分:

tumoridx <- rep(1:nrow(tumor), each=nrow(cells)
cellsidx <- rep(1:nrow(cells), nrow(tumor))
tcdist <- matrix(sqrt(rowSums((tumor[tumoridx, ] - cells[cellsidx, ])^2)),
     nrow(cells), nrow(tumor))

tumoridx请提供一个可复制的示例(模拟值很好)、您尝试过的代码以及期望的结果。