【问题标题】:Directly getting the elements of an array/cell in Matlab [duplicate]在Matlab中直接获取数组/单元格的元素[重复]
【发布时间】:2015-05-14 11:44:11
【问题描述】:

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

【问题讨论】:

    标签: arrays matlab matrix cell-array


    【解决方案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(funcs{2}, 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) 是的:只需使用funcs{2}(2)feval(funcs{2}, 2)

      iii) 您可以尝试以下方法:

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

      【讨论】:

      • 所以你可以直接使用funcs{2}(s)!不错
      • @LuisMendo,是的,那里不需要feval。我只是把这种可能性作为我对第三部分的回答的引导。
      • 我再次尝试了funcs{2}(2),我得到的错误是因为其他原因!现在可以正常使用了,谢谢。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-22
      • 2012-11-20
      • 1970-01-01
      • 1970-01-01
      • 2011-11-14
      相关资源
      最近更新 更多