MATLAB中单元索引的重点是什么?

时间:2016-02-17 21:51:53

标签: matlab

索引的主要目的是在MATLAB中获取值, 对于单元格数组,有内容索引,所以单元格索引 仅用于从单元阵列中选择子集吗?

还有其他高级用法吗?喜欢用作 指针并传递给函数?

1 个答案:

答案 0 :(得分:3)

答案很简单。 {} -indexing返回内容,()-indexing创建带有索引元素的子单元格。我们举一个简单的例子:

>> a=x(2)

a = 

    [2]

>> class(a)

ans =

cell

>> b=x{2}

b =

     2

>> class(b)

ans =

double

现在继续使用非标量元素。对于() - 索引,一切都按预期运行,您将收到一个包含元素的子单元格:

>> a=x(2:3)

a = 

    [2]    [3]

Matlab真正特别的是使用带有非标量索引的{} -indexing。它返回包含所有内容的Comma-Separated List。现在发生了什么:

>> b=x{2:3}

b =

     2

逗号分隔列表的行为类似于具有两个返回参数的函数。您只需要一个值,只分配一个值。第二个值丢失了。您还可以使用它同时为单个列表分配多个元素:

>> [a,b]=x{2:3} %old MATLAB versions require deal here

a =

     2


b =

     3

现在终于得到了一个非常强大的逗号分隔列表用例。假设你有一些愚蠢的函数foo需要很多输入参数。在您的代码中,您可以编写如下内容:

foo(a,b,c,d,e,f)

或者,假设您将所有参数存储在单元格中:

foo(a{1},a{2},a{3},a{4},a{5},a{6})

或者,您可以使用逗号分隔列表调用该函数。假设a有6个元素,则该行完全等同于前一个:

foo(a{:}) %The : is a short cut for 1:end, index the first to the last element

此处演示的输入参数的相同技术也可用于输出参数。

关于指针的最后一个问题。 Matlab不使用指针,它没有任何补充(除了Matlab中的handle),但Matlab在优化内存使用方面非常强大。特别是使用Copy-on-write使得在大多数情况下不必使用指针。您通常最终会使用

等功能
M=myMatrixOperation(M,parameter,parameter2)

您输入数据并将其返回的位置。