如何在 Matlab 中使用元胞数组?

Posted

技术标签:

【中文标题】如何在 Matlab 中使用元胞数组?【英文标题】:How to use cell arrays in Matlab? 【发布时间】:2014-10-26 13:20:51 【问题描述】:

我是使用 Matlab 的初学者,遇到过元胞数组,但我不知道如何为它使用索引。

我通过执行以下操作创建了一个 5 行和 3 列的元胞数组:

A = cell(5,3);

现在是否可以先逐行遍历单元格数组,然后像嵌套的for 循环一样对普通数组进行遍历?

    for i=1:5
        for j=1:3
           Ai,j = "random" //random numbers/ string etc
        end
    end

【问题讨论】:

【参考方案1】:

对于元胞数组,您有两种索引方法,即括号(即(...))和大括号(即...)。

让我们创建一个元胞数组以用于示例:

A = 3,   9,     'a'; 
     'B', [2,4], 0;

使用括号进行索引会返回元胞数组的一部分作为 CELL ARRAY。例如

A(:,3)

返回一个 2×1 元胞数组

ans =

    'a'
     0

使用大括号进行索引返回该单元格的 CONTENTS,例如

A1,3

返回单个字符

ans =

a

您也可以使用括号返回单个单元格,但它仍然是一个单元格。您也可以使用大括号返回多个单元格,但这些单元格返回为comma separated lists,这有点高级。

分配给单元格时,应用非常相似的概念。如果您使用括号进行分配,那么您必须分配一个适当大小的 cell 矩阵:

A(:,1) = 1,1

如果您使用括号分配单个值,那么您必须将它放在一个单元格中(即A(1) = 2 会给您一个错误,所以您必须使用A(1) = 2)。所以最好使用大括号,因为这样会直接影响单元格的内容。所以去是对的

A1 = 2

这相当于A(1) = 2。请注意,您所做的 A1 = 2 不会给出错误,但所做的是在您的单元格中嵌套一个单元格,这不太可能是您所追求的。

最后,如果您的一个单元格中有一个矩阵,那么 Matlab 允许您直接索引到该矩阵,如下所示:

A2,2(1)

ans = 

     3

【讨论】:

【参考方案2】:

例如:

for i=1:5
    for j=1:3
       Ai,j = rand(3)
    end
end

应该可以正常工作 只需跳过 =

右侧的

【讨论】:

以上是关于如何在 Matlab 中使用元胞数组?的主要内容,如果未能解决你的问题,请参考以下文章

matlab元胞数组如何提取里面的具体元素?

如何在 MATLAB 中连接元胞数组中的字符串,它们之间有空格?

如何在 MATLAB 的元胞数组中搜索字符串?

请问如何使用MATLAB进行元胞数组批量提取数据。

如何使用MATLAB进行元胞数组批量提取数据?

在Matlab里面如何实现字符串的拼接