gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-05 03:11:58 24 4
gpt4 key购买 nike

索引的要点主要是获取值。在 MATLAB 中,对于元胞数组,存在内容索引 ({}),因此元胞索引 (()) 仅用于从元胞数组中选择一个子集,对吧?

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

最佳答案

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

>> a=x(2)

a =

[2]

>> class(a)

ans =

cell

>> b=x{2}

b =

2

>> class(b)

ans =

double

现在继续处理非标量元素。对于 ()-indexing 一切都按预期运行,您会收到一个包含以下元素的子单元格:

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

这样的函数
M=myMatrixOperation(M,parameter,parameter2)

输入和返回数据的位置。

关于arrays - MATLAB 中的单元格索引有什么意义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35468521/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com