在Matlab中直接获取数组/单元格的元素[重复]
Posted
技术标签:
【中文标题】在Matlab中直接获取数组/单元格的元素[重复]【英文标题】:Directly getting the elements of an array/cell in Matlab [duplicate] 【发布时间】:2015-05-14 11:44:11 【问题描述】:假设我有一个像 [10,3,4] 这样的向量,有没有办法直接获取第二个元素?比如:
[10,3,4](2)
另外,如果我有一个匿名函数单元格,例如:
funcs = @(s) s^2 , @(s) s+5,
有没有办法以如下方式访问它们:
funcs2(s)
(编辑:funcs2(s) 有效。事实证明我得到的错误是因为其他原因!) 我想要做的是将函数的梯度保存在像 $gradr$ 这样的单元格中,然后能够用另一个向量得到它的点积。有点像:
dot([gradr1(s),gradr2(s)],n)
我不能为每个组件分配不同的名称,因为我稍后会使用编号。
提前谢谢你。
编辑:我的问题第一部分的答案可以在here找到。
【问题讨论】:
【参考方案1】:第一部分:引用gnovice的话,其实是possible, but ugly。也许最简单的方法(在链接问题的答案之一中描述)是(ab)使用getfield
:
>> getfield([3 4 5],2)
ans =
4
第二部分:可以使用feval
:
>> funcs = @(s) s^2, @(s) s+5;
>> s = 3;
>> feval(funcs2, s)
ans =
8
或查看Sam Robert's answer。
【讨论】:
【参考方案2】:如果要临时调用向量,可以使用 ans(2) ,否则最好将其影响为变量。
>> [10,3,4]
ans =
10 3 4
>> ans(2)
ans =
3
【讨论】:
实际上,通过不将赋值运算符放在那里,您将其分配给变量ans
。取决于ans
可以在命令行上进行快速计算,但我强烈建议不要在普通函数或脚本中使用类似的东西。【参考方案3】:
i) 不,不是。您需要将[10, 3, 4]
放入变量a
中,然后获取第二个元素a(2)
。 (你can去做,但不值得)。
ii) 是的:只需使用funcs2(2)
或feval(funcs2, 2)
。
iii) 您可以尝试以下方法:
>> inarg = 1;
>> cellfun(@(x)feval(x,inarg),funcs)
ans =
1 6
【讨论】:
所以你可以直接使用funcs2(s)
!不错
@LuisMendo,是的,那里不需要feval
。我只是把这种可能性作为我对第三部分的回答的引导。
我再次尝试了funcs2(2),我得到的错误是因为其他原因!现在可以正常使用了,谢谢。以上是关于在Matlab中直接获取数组/单元格的元素[重复]的主要内容,如果未能解决你的问题,请参考以下文章
jQuery - 获取与单击的元素在同一行中的表格单元格的文本值