在Matlab中直接获取一个array/cell的元素

Directly getting the elements of an array/cell in Matlab

假设我有一个像 [10,3,4] 这样的向量,有没有办法直接获取第二个元素?类似于:

[10,3,4](2)

此外,如果我有一个匿名函数的单元格,例如:

funcs = {@(s) s^2 , @(s) s+5},

有没有办法像这样访问它们:

funcs{2}(s)

(编辑:funcs{2}(s) 有效。原来我得到的错误是因为其他原因!) 我想要做的是将函数的梯度保存在像 $gradr$ 这样的单元格中,然后能够得到它与另一个向量的点积。喜欢的东西:

dot([gradr{1}(s),gradr{2}(s)],n)

我无法为每个组件分配不同的名称,因为我稍后会使用编号。

提前致谢。

编辑:可以找到我问题第一部分的答案 here

对于第一部分:引用 gnovice's words, it's actually possible, but ugly. Perhaps the easiest way (described in one of the answers to the linked question) is to (ab)use getfield:

>> getfield([3 4 5],{2})
ans =
    4

对于第二部分:你可以使用feval:

>> funcs = {@(s) s^2, @(s) s+5};
>> s = 3;
>> feval(funcs{2}, s)
ans =
     8

或参见

如果你要临时调用向量,你可以使用ans(2),否则,你最好将它影响到一个变量。

>> [10,3,4]

ans =

    10     3     4

>> ans(2)

ans =

     3

i) 不,不是真的。你需要把[10, 3, 4]放入一个变量a,然后得到第二个元素a(2)。 (你can做了,但不值得)。

ii) 是:只需使用 funcs{2}(2)feval(funcs{2}, 2).

iii) 您可以尝试类似的操作:

>> inarg = 1;
>> cellfun(@(x)feval(x,inarg),funcs)
ans =
     1     6