所以我已经在SO
找到了许多的问题和答案,我认为我的方法应该有效,因为它不是很复杂。然而,我已经尝试了每个位置,因为我的时间维度是可能的,对我而言,现在重塑并保持一个维度不相同:
我有一个400x400x20x24阵列,其中400x400是一个图像,24是20倍的图像数量。我必须对每个体素进行操作并使这更快,我想将我的数组重新整形为2D矩阵,其中一维为20且仅具有时间值。我知道(或者我认为我知道)如何做到这一点,并在重塑之前尝试了所有可能的维度顺序,但没有一个导致我的旧数据:
array1 = rand(400,400,20,24);
这是一个体素过时的样子
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,:)))
我不明白为什么它不起作用。我看过这些问题,但他们似乎建议我做得对,对吧?
How do I resize a matrix in MATLAB?
Reshaping a 3 dimensional array to 2 dimensions
Change a multidimensional vector to two dimensional vector matlab
MATLAB reshape matrix converting indices to row index
How to reshape matlab matrices for this example?
Reshape matrix from 3d to 2d keeping rows
Reshape 3d matrix to 2d matrix
当然我也读过:
http://www.mathworks.nl/help/matlab/ref/reshape.html
http://www.mathworks.nl/help/matlab/ref/permute.html
一切都无济于事。有人请帮帮我?谢谢!
答案 0 :(得分:3)
需要注意的第一个问题是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
。立即行动。