对于2列滚珠轴承,我在x和y方向上有振动数据(g)。有没有办法找到曼哈顿距离只是这个数据&时间?
答案 0 :(得分:1)
如果您要求的只是总结data(:,1)
和data(:,2)
,(使用@Austin answer),使用矢量和将是最快的:
out = data(:,1)+data(:,2);
以下是一个例子:
function timming_mat_dist
data = randi(100,1e6,2);
timeit(@()arrmat(data))
timeit(@()vecmat(data))
end
function out = arrmat(data)
man_hat_dist_func = @(x,y)x+y;
out = arrayfun(man_hat_dist_func,data(:,1),data(:,2));
end
function out = vecmat(data)
out = data(:,1)+data(:,2);
end
arrmat
的结果 2.8936 秒,vecmat
的结果 0.0020463 秒。
但是,如果要计算所有距离,则应使用pdist
:
out = pdist(data,'cityblock');
但请注意输出将是巨大的(并且MATLAB可能不会为此分配如此多的内存),正如@hammadian在his answer指出的那样。
答案 1 :(得分:0)
如果您要为每组x和y找到曼哈顿距离,我建议使用arrayfun
用法如下:
man_hat_dist_func = @(x,y)x+y;
out = arrayfun(man_hat_dist_func,data(:,1),data(:,2));
OR
out = arrayfun(@(x,y)x+y,data(:,1),data(:,2));
这应该是解决距离的最快选择。您还应该考虑使用out
为out = zeros(Length(data(:,1)),1);
预分配内存。
答案 2 :(得分:0)
这取决于您想要测量哪一对之间的距离。如果您正在寻找所有可能的点组合,这将是内存和耗时,因为空间要求将存储在尺寸为2D矩阵:300万* 300万/ 2(/ 2,因为a和b之间的距离相同如b和a),矩阵是上三角形。 这是3000000 * 3000000/2 = 4.5 Tera字节。这可以改进,但内存要求仍然很高。