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

3

我是Matlab的初学者,在使用过程中遇到了cell数组,但我不确定如何为其使用索引。

我通过以下方式创建了一个5行3列的cell数组:

A = cell(5,3);

现在是否有可能按行先遍历单元格数组,然后再像普通数组的嵌套for循环一样按列遍历呢?

    for i=1:5
        for j=1:3
           A{i,j} = {"random"} //random numbers/ string etc
        end
    end
2个回答

5

使用单元数组有两种索引方法,即括号(即(...))和花括号(即{...})。

让我们创建一个用于示例的单元数组:

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

使用括号进行索引会返回单元格数组的一部分作为单元格数组。例如:

A(:,3)

返回一个2x1的单元数组。
ans =

    'a'
     0

使用括号索引返回该单元格的内容,例如:

A{1,3}

返回一个单一的字符

ans =

a

您也可以使用括号返回单个单元格,但是它仍然是一个单元格。您还可以使用大括号返回多个单元格,但这些将作为逗号分隔的列表返回,这需要更高级一些。
在赋值单元格时,非常相似的概念适用。如果您使用括号进行分配,则必须分配相应大小的单元格矩阵:
A(:,1) = {1,1}

如果使用括号分配单个值,则必须将其放入单元格中(即A(1) = 2会导致错误,因此您必须使用A(1) = {2})。因此,最好使用花括号,因为这样可以直接影响单元格的内容。因此,正确的做法是

A{1} = 2

这等价于A(1) = {2}。请注意,A{1} = {2}不会报错,但它实际上是在你的单元格中嵌套了一个单元格,这不太可能是你想要的。

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

A{2,2}(1)

ans = 

     3

2

例如:

for i=1:5
    for j=1:3
       A{i,j} = rand(3)
    end
end

应该可以完美地工作
只需在等号右侧跳过{ }


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