在MatLab中建立单元格索引的意义是什么

eqoofvh9  于 2022-11-15  发布在  Matlab
关注(0)|答案(1)|浏览(160)

标引的目的主要是为了获得价值。在MatLab中,对于单元数组,有内容索引({}),因此单元索引(())只用于从单元数组中选择子集,对吗?
它还有其他高级用途吗?比如将其用作指针并将其传递给函数?

5ssjco0h

5ssjco0h1#

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

>> 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来说,真正特别的是使用非标量索引的{}索引。它返回一个包含所有内容的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)

在那里您输入数据并返回数据。

相关问题