2015-11-06 193 views
2

在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

谢谢!期待你的回答

回答

2

如果我正确理解你的问题,你有一个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{:}创建逗号分隔列表来封装。

+2

+1花时间充分解释您的答案。做得好。有许多人认为'C {:}'或'C(:)'的语法理所当然,而不理解它正在做什么。 – Matt

+0

@Matt谢谢:)是的,这是一个特点,并不是很多人想知道的,但是一旦你了解它,这是一件了不起的事情。它的一个很好的用处是用于输入函数参数。你可以将所有的参数放在一个单元格中,然后通过'func(C {:})'来调用函数,而不必输入用逗号分隔的每个参数。 – rayryeng