在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
假设我有一个像 [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