【问题标题】:How to convert a cell array of 2D matrices into a multidimensional array in MATLAB如何在 MATLAB 中将二维矩阵的元胞数组转换为多维数组
【发布时间】:2023-08-11 18:22:02
【问题描述】:

在 MATLAB 中,我有一个已定义的元胞数组 C

size(C) = 1 乘 150

此单元格C 的每个矩阵T 的大小为

size(C{i}) = 8 乘 16

我想知道是否有办法定义一个新的多维 (3D) 矩阵 M,其大小为 8 x 16 x 150

那是当我写命令 size(M) 我得到 8 x 16 x 150

谢谢!期待您的回答

【问题讨论】:

    标签: arrays matlab matrix multidimensional-array


    【解决方案1】:

    如果我正确理解您的问题,您有一个由 150 个单元组成的单元阵列,每个单元元素是 8 x 16,并且您希望将所有这些矩阵在第三维中堆叠在一起,这样您就有一个 3D 矩阵大小为8 x 16 x 150

    很简单:

    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 谢谢 :) 是的,这是一个没有多少人愿意知道的特性,但是一旦你学会了它就知道它是一件很棒的事情。它的一个很好的用途是输入函数参数。您可以将所有参数放在一个单元格中,然后只需通过 func(C{:}) 调用该函数,而不必输入以逗号分隔的每个单独参数。