したがって、これについてはすでに多くの質問と回答が見つかりましSO
た。それほど複雑ではないため、私のアプローチは機能するはずです。ただし、可能な限り時間次元のすべての位置を試しましたが、現在、1 つの次元を再形成して同じ次元に保つことはできません。
私は400x400が画像で、24が20倍の画像の数である400x400x20x24の配列を持っています。ボクセルごとに操作を行う必要があり、これを高速化するために、配列を 1 つの次元が 20 で時間値のみを持つ 2D マトリックスに再形成したいと考えています。私はこれを行う方法を知っています(または知っていると思っていました)。再形成する前に可能な限りの次元の順序を試しましたが、古いデータにはなりませんでした:
array1 = rand(400,400,20,24);
これは、1 ボクセル オーバー タイムがどのように見えるかです
plot([1:20], squeeze(array1(200,200,:,12)))
twoD1 = reshape(array1, [], 20);
size(twoD)
ans = 3840000 20
これまでのところ、ピクセルとその時間値をプロットするまでは良好です
plot([1:20], squeeze(twoD1(962400,:)))
うーん、ちょっと待って、サイズ 20 の寸法がサイズ 20 の元の寸法ではなくなりました。元の寸法を再配置すると、これに影響する可能性があります。
array2 = permute(array1, [3 1 2 4]);
array3 = permute(array1, [1 3 2 4]);
array4 = permute(array1, [1 2 4 3]);
twoD2 = reshape(array2, [], 20);
twoD3 = reshape(array3, [], 20);
twoD4 = reshape(array4, [], 20);
plot([1:20], squeeze(twoD2(962400,:)))
plot([1:20], squeeze(twoD3(962400,:)))
plot([1:20], squeeze(twoD4(962400,:)))
なぜ機能しないのかわかりません。私はこれらの質問を見てきましたが、私はそれを正しく行うことを示唆しているようですよね?
MATLAB で行列のサイズを変更するにはどうすればよいですか?
多次元ベクトルを 2 次元ベクトルに変更します。 matlab
インデックスを行インデックスに変換する MATLAB reshape 行列
もちろん、私も読んだ:
http://www.mathworks.nl/help/matlab/ref/reshape.html
http://www.mathworks.nl/help/matlab/ref/permute.html
すべて役に立たない。誰か助けてください。ありがとうございました!