在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中直接获取数组/单元格的元素[重复]的主要内容,如果未能解决你的问题,请参考以下文章

MATLAB中,如何统计非数的个数

在2D数组java中查找重复的单元格

如何在vba中得到当前单元格的行号和列号

jQuery - 获取与单击的元素在同一行中的表格单元格的文本值

如何在Javascript中使用其旁边元素的值更改单元格的元素?

matlab如何让数组每个元素重复出现?