每个人。我有一个名为“数据”的 3 维数据点矩阵,其维度为 N*3。现在,我正在尝试获得两个值:
首先,距离矩阵“Dist”的索引“m”和“n”,其中
Dist = squareform(pdist(data));
这样
[m,n] = find( Dist<=rc & Dist>0 );
其中“rc”是某个截止距离,“m”是行索引,“n”是列索引。
二、条件距离“ConDist”,其中
ConDist = data( pdist(data)<=rc & pdist(data)>0 );
此代码适用于小型“数据”(其中 N < 3500),但是,对于大型“数据”(N > 25000),此过程需要太多时间/内存。因此,我尝试通过执行以下操作来最小化时间/内存:
Dist = zeros(size(data,1));
Dist(tril(true(size(data,1)),-1)) = pdist(data);
[m,n] = find(Dist <= rc & Dist > 0);
ConDist = Dist(Dist <= rc & Dist > 0);
这里,我只计算了“squareform”命令的下三角边,以减少计算时间(或者说内存,不知道MATLAB怎么会觉得这段代码简单多了)。但是,计算“Dist”变量似乎仍然需要大量时间/内存
是否有更快/更少内存消耗的方法来计算“m”、“n”和“ConDist”?非常感谢您提前。