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)

あなたの質問で指定されているように、Yの2番目の次元に沿って操作するように[]伝え2ます。diff

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-file に入れても、この場合は違いがないように見えます。

于 2013-05-08T20:02:00.493 に答える