Y=rand(1000,28);
したがって、列ごとの違いを見つけたい配列があります。
[~ c]=size(Y);
for i=1:c-1
Y(:,i)-Y(:,i+1)
end
を使用してこれを行うことはできますbsxfun
か?
関数を使用してこれを行うこともできます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 に入れても、この場合は違いがないように見えます。