0

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

[~ c]=size(Y);

for i=1:c-1
Y(:,i)-Y(:,i+1)
end

我可以这样做bsxfun吗?

4

2 回答 2

4

您也可以使用以下功能执行此操作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.

编辑:建议使用该timeit功能更准确地计算这些时间;结果是:

>> timeit(@()-diff(Y, [] , 2))

ans =

    0.0071

>> timeit(@()Y(:,1:end-1) - Y(:,2:end))

ans =

    0.0119

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

于 2013-05-08T20:02:00.493 回答
3

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

dY = Y(:,1:end-1) - Y(:,2:end)
于 2013-05-08T19:55:24.153 回答