重塑三维矩阵以2D矩阵重塑三维矩阵以2D矩阵(Reshape 3d matrix to 2d mat

2019-05-12 01:37发布

我有一个3D矩阵( n-by-m-by-t在MATLAB表示) n-by-m网格中经过一段时间测量。 我想有一个二维矩阵,其中所述空间信息消失了,只有n*m测量随着时间的推移t被留下(即: n*m-by-t

我怎样才能做到这一点?

Answer 1:

你需要的命令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(:,:)凝聚最后两个维度,但重塑更快。



Answer 2:

重塑是当然的标准溶液,以重塑阵列。 (还有什么他们会打电话吗?)还有一些技巧来发掘。

首先,把尺寸[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);


Answer 3:

较好地解决了这个问题是使用可从拉斯穆斯兄弟的N路工具箱nshape.m。 这将允许你沿着一个给定的模式,这是一个小更棘手与重塑命令重塑。

该工具箱可通过以下链接:

https://www.mathworks.com/matlabcentral/fileexchange/1088-the-n-way-toolbox

还有其他一些优秀的工具有帮助数组操作为好。



文章来源: Reshape 3d matrix to 2d matrix