索引的主要目的是在MATLAB中获取值, 对于单元格数组,有内容索引,所以单元格索引 仅用于从单元阵列中选择子集吗?
还有其他高级用法吗?喜欢用作 指针并传递给函数?
答案 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)
您输入数据并将其返回的位置。