Matlab麻烦了很多数据。振动数据长达300万行

时间:2016-09-03 23:54:37

标签: matlab performance

对于2列滚珠轴承,我在x和y方向上有振动数据(g)。有没有办法找到曼哈顿距离只是这个数据&时间?

3 个答案:

答案 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));

这应该是解决距离的最快选择。您还应该考虑使用outout = zeros(Length(data(:,1)),1);预分配内存。

答案 2 :(得分:0)

这取决于您想要测量哪一对之间的距离。如果您正在寻找所有可能的点组合,这将是内存和耗时,因为空间要求将存储在尺寸为2D矩阵:300万* 300万/ 2(/ 2,因为a和b之间的距离相同如b和a),矩阵是上三角形。 这是3000000 * 3000000/2 = 4.5 Tera字节。这可以改进,但内存要求仍然很高。