Matlab矢量化矩阵减法使用bsxfun



我有一个数组Y=rand(1000,28);,我想找到按列排列的差异:

[~ c]=size(Y);
for i=1:c-1
Y(:,i)-Y(:,i+1)
end

我可以使用bsxfun吗?

您也可以使用diff:

函数来做到这一点
dY = -diff(Y, [], 2)

[]2告诉diff沿着Y的第二次元操作,正如你的问题所指定的。

注意,这实际上更快,因为diff是一个内置函数:
>> Y = rand(100, 10000);
>> tic; for n = 1:1000; dY = -diff(Y, [] , 2); end; toc
Elapsed time is 5.453160 seconds.
>> tic; for n = 1:1000; dY = Y(:,1:end-1) - Y(:,2:end); end; toc
Elapsed time is 11.383666 seconds.

Edit:有人建议使用timeit函数来更准确地计算这些计时;结果如下:

>> timeit(@()-diff(Y, [] , 2))
ans =
    0.0071
>> timeit(@()Y(:,1:end-1) - Y(:,2:end))
ans =
    0.0119

同样,在这种情况下,将这些放在m文件中似乎没有什么不同。

不要使用bsxfun。用最简单的方法:

dY = Y(:,1:end-1) - Y(:,2:end)

相关内容

  • 没有找到相关文章

最新更新