在MATLAB中,我有一个定义单元阵列C
的如何2D矩阵的单元阵列转换成一个多维阵列中MATLAB
size(C)
= 1由150
该细胞C
是每个矩阵T
size(C{i})
= 8×16
大小的我想知道如果有一种方法以定义新的多维(3D)矩阵M
吨帽子是16尺寸为8 150
那就是当我写的命令size(M)
我16获得8 150
谢谢!期待你的回答
在MATLAB中,我有一个定义单元阵列C
的如何2D矩阵的单元阵列转换成一个多维阵列中MATLAB
size(C)
= 1由150
该细胞C
是每个矩阵T
size(C{i})
= 8×16
大小的我想知道如果有一种方法以定义新的多维(3D)矩阵M
吨帽子是16尺寸为8 150
那就是当我写的命令size(M)
我16获得8 150
谢谢!期待你的回答
如果我正确理解你的问题,你有一个150单元格的单元格数组,每个单元格元素是8 x 16
,并且你希望将所有这些矩阵堆积在第三维中,所以你有一个尺寸为8 x 16 x 150
的3D矩阵。
这是一个简单的:
M = cat(3, C{:});
这句法可能看起来很奇怪,但它是非常有效的。命令cat
执行矩阵串联,其中第一个参数是要连接的维度...所以在您的情况下,这是第三维,以及后面的参数是要连接以生成最终矩阵的矩阵。
做C{:}
创建所谓的comma-separated list。这相当于打字了MATLAB中的语法如下:
C{1}, C{2}, C{3}, ..., C{150}
因此,通过做cat(3, C{:});
,你在做什么真正做的是:
cat(3, C{1}, C{2}, C{3}, ..., C{150});
这样,你采取一切在150个单元格中,并将它们连接在一起。但是,不必输入150个单独的单元格条目,而是通过使用C{:}
创建逗号分隔列表来封装。
+1花时间充分解释您的答案。做得好。有许多人认为'C {:}'或'C(:)'的语法理所当然,而不理解它正在做什么。 – Matt
@Matt谢谢:)是的,这是一个特点,并不是很多人想知道的,但是一旦你了解它,这是一件了不起的事情。它的一个很好的用处是用于输入函数参数。你可以将所有的参数放在一个单元格中,然后通过'func(C {:})'来调用函数,而不必输入用逗号分隔的每个参数。 – rayryeng