八度音阶结构更简单的“地图”

时间:2018-06-05 08:56:25

标签: octave

我在八度音程中有以下结构数组:

p=[struct('a',[1,2],'b',[3,4,5]),struct('a',[7,8,9],'b',[10,11])]

现在我想将一个函数统一应用于它们:

arrayfun(@(x) x.b(1:2),p)

但由于八度音程并未推断表达式b(1:2)会产生统一的结果,因此我得到:

error: arrayfun: all values must be scalars when UniformOutput = true

现在我找到了以下解决方法:

reshape(cell2mat(arrayfun(@(x) x.b(1:2),p,"UniformOutput",false)),2,2)'

有更简单的方法吗?

1 个答案:

答案 0 :(得分:0)

Documentation:

  

如果参数val后面还有一个字符串输入参数   “UniformOutput”设置为true(默认值),然后是命名函数   func必须返回一个元素,然后将其连接起来   返回值并且是矩阵类型。

统一输出意味着输入和输出的大小相同,而不是所有返回的值都相似。

你可以通过将报价隐藏到不同的位置来避免重塑:

cell2mat(arrayfun(@(x) x.b(1:2)',p,"UniformOutput",false))
cell2mat(arrayfun(@(x) x.b(1:2),p,"UniformOutput",false)')

但细胞转换步骤将保持不变。 (另外,请注意引号和复数。)