MATLAB中的单元索引有什么意义

MATLAB中的单元索引有什么意义,matlab,Matlab,索引的重点主要是获取值,在MATLAB中, 对于单元数组,有内容索引,所以单元索引 仅用于从单元格数组中选择子集,对吗 它还有其他高级用途吗?喜欢用作 指向函数的指针和传递?有一个非常简单的答案。{}-索引返回内容,()-索引创建包含索引元素的子单元格。让我们举一个简单的例子: >> a=x(2) a = [2] >> class(a) ans = cell >> b=x{2} b = 2 >> class(b

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

它还有其他高级用途吗?喜欢用作
指向函数的指针和传递?

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

>> 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真正特别的地方是使用{}索引和非标量索引。它返回一个包含所有内容的。现在这里发生了什么:

>> 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不使用指针,也没有对其进行补充(除了oop Matlab中的
handle
),但Matlab在优化内存使用方面非常强大。尤其是在大多数情况下,使用指针使得没有必要使用指针。您通常会得到如下函数

M=myMatrixOperation(M,parameter,parameter2)

在这里输入数据并返回

所以基本上,()可以做什么,{}也可以做什么,再加上获取内容,那么为什么我们需要()呢?你可以用
{x{2:3}
替换
{x{2:3}
。除了保存一些字符外,对具有相同行为的单元和矩阵进行(-)索引简化了可以同时处理这两种功能的函数。如果答案已经解决了问题,请通过单击复选标记来考虑。这表明您已经找到了解决方案,这不再是一个悬而未决的问题。如果你的问题没有得到回答,请解释遗漏了什么。