我有一个3D矩阵( n-by-m-by-t
在MATLAB表示) n-by-m
网格中经过一段时间测量。 我想有一个二维矩阵,其中所述空间信息消失了,只有n*m
测量随着时间的推移t
被留下(即: n*m-by-t
)
我怎样才能做到这一点?
我有一个3D矩阵( n-by-m-by-t
在MATLAB表示) n-by-m
网格中经过一段时间测量。 我想有一个二维矩阵,其中所述空间信息消失了,只有n*m
测量随着时间的推移t
被留下(即: n*m-by-t
)
我怎样才能做到这一点?
你需要的命令reshape
:
说你的初始矩阵(只是让我得到一些数据):
a=rand(4,6,8);
然后,如果最后两个坐标空间(时间为4,m为6,n是8)使用:
a=reshape(a,[4 48]);
你结束了一个4x48阵列。
如果前两个是空间和上次时间(m为4,n为6,时间8)使用:
a=reshape(a,[24 8]);
你结束了一个24x8阵列。
这是一种快速,O(1)操作(它只是调整它的什么数据的形状为头)。 这样做有它,如其他方式a=a(:,:)
凝聚最后两个维度,但重塑更快。
重塑是当然的标准溶液,以重塑阵列。 (还有什么他们会打电话吗?)还有一些技巧来发掘。
首先,把尺寸[N,M,P]的数组大小的数组[N * M,P]最简单的方法是什么?
B = reshape(A,n*m,p);
但更好的是这样的:
B = reshape(A,[],p);
如果你离开的理由之一重塑空,那么重塑计算尺寸为您服务! 要小心,如果你尝试这一点,A的尺寸不符合,那么你会得到一个错误。 从而:
reshape(magic(3),[],2)
??? Error using ==> reshape
Product of known dimensions, 2, not divisible into total number of elements, 9.
从逻辑上讲,我们不能创造与东西中有9个元素两列的数组。 我没有把调用的函数wreshape在MATLAB中央交换,将在必要时垫与生成任何错误做这个操作。
当然,你总是可以使用类似的技巧
B = A(:);
直接从一个矩阵创建矢量。 这等同于形式
B=reshape(A,[],1);
较好地解决了这个问题是使用可从拉斯穆斯兄弟的N路工具箱nshape.m。 这将允许你沿着一个给定的模式,这是一个小更棘手与重塑命令重塑。
该工具箱可通过以下链接:
https://www.mathworks.com/matlabcentral/fileexchange/1088-the-n-way-toolbox
还有其他一些优秀的工具有帮助数组操作为好。