4

したがって、これについてはすでに多くの質問と回答が見つかりまし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,:)))

変形1

うーん、ちょっと待って、サイズ 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,:)))

reshape2

reshape3

reshape4

なぜ機能しないのかわかりません。私はこれらの質問を見てきましたが、私はそれを正しく行うことを示唆しているようですよね?

matlab で行列を再形成する

MATLAB で行列のサイズを変更するにはどうすればよいですか?

3 次元配列を 2 次元に変形する

多次元ベクトルを 2 次元ベクトルに変更します。 matlab

インデックスを行インデックスに変換する MATLAB reshape 行列

この例の matlab 行列を再形成する方法は?

行を維持しながら行列を 3 次元から 2 次元に変形

3 次元マトリックスを 2 次元マトリックスに変形

もちろん、私も読んだ:

http://www.mathworks.nl/help/matlab/ref/reshape.html

http://www.mathworks.nl/help/matlab/ref/permute.html

すべて役に立たない。誰か助けてください。ありがとうございました!

4

1 に答える 1

4

注意すべき最初の問題は、 is であるtwoD1 = reshape(array1, [], 20);ため、それはあなたが望むことをしないということarray1です400x400x20x24。最後の次元が次reshapeの場合にのみ、意図したとおりに機能します。20

twoD = reshape(permute(array1,[1 2 4 3]),[],20);

これにより、すべてのピクセル、24 の画像すべてが 20 時点で得られます。画像 12 のピクセル (200,200) の 20 時点をプロットする場合は、次の操作を行います。

[numRows,numCols,numTimes,numSlices] = size(array1);
imgInd = 12; pixRow = 200; pixCol = 200;
ind = sub2ind([numRows numCols numSlices],pixRow,pixCol,imgInd)
% ind = pixRow + numRows*(pixCol-1) + numRows*numCols*(imgInd-1)
plot(1:size(twoD,2), twoD(ind,:))

編集:申し訳ありませんが、ind最初に間違って計算しました。今すぐ動作します。

于 2013-10-10T20:03:27.177 に答える