如何在MATLAB中将一个由二维矩阵组成的单元数组转换为多维数组

3
在MATLAB中,我有一个定义好的单元数组Csize(C) = 1乘以150。
每个矩阵T在这个单元格C中的大小为: size(C{i}) = 8乘以16。
我想知道是否有一种方法来定义一个新的多维(3D)矩阵M,其大小为8乘以16乘以150。
也就是说,当我输入命令size(M)时,我会得到8乘以16乘以150。
谢谢!期待您的回答。
1个回答

2
如果我正确理解了您的问题,您有一个由150个单元格组成的单元格数组,每个单元格元素为8 x 16,您希望将所有这些矩阵在第三维中堆叠在一起,以便您获得一个大小为8 x 16 x 150的3D矩阵。
做法很简单:
M = cat(3, C{:});

这个语法看起来很奇怪,但是它是非常有效的。命令 cat 执行矩阵连接,其中第一个参数是您想要连接到的维度...因此在您的情况下,那就是第三个维度,之后的参数是您想要连接以生成最终矩阵的矩阵。
执行 C {:} 创建了所谓的逗号分隔列表。这相当于在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
非常感谢您花时间详细解释答案。做得好。许多人认为C {:}C(:)的语法理所当然,却不了解它的作用。 - Matt
@Matt 谢谢 :) 是的,这是一个不太多人关心的特性,但一旦你学会了它,就是一件很棒的事情。它的一个很好的用途是用于函数参数输入。你可以把所有的参数放在一个单元格中,然后只需通过 func(C{:}) 调用函数,而不必输入每个单独的参数并用逗号分隔。 - rayryeng

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接