所以我已经找到了很多关于这个的问题和答案SO
,我认为我的方法应该可行,因为它不是很复杂。但是,我已经为我的时间维度尝试了每个位置,对我来说,现在重塑和保持一个维度相同是行不通的:
我有一个 400x400x20x24 数组,其中 400x400 是一个图像,24 是 20 次的图像数量。我必须对每个体素进行操作,为了更快,我想将我的数组重塑为一个二维矩阵,其中一维是 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,:)))
我不明白为什么它不起作用。我看过这些问题,但它们似乎表明我做对了,对吧?
当然我也读过:
http://www.mathworks.nl/help/matlab/ref/reshape.html
http://www.mathworks.nl/help/matlab/ref/permute.html
一切都无济于事。有人请帮助我吗?谢谢!