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

Octave “更简单”;“地图”;八度音阶结构,octave,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)产生一致的结果,因此我得到: 错误:arrayfun:当UniformOutput=true时,所有值都必须是标量 现在我找到了以下解决方法: 重塑(cell2mat(arrayfun(@(x)x.b(1:2),p,“Uni

我有以下八度结构数组:

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)
产生一致的结果,因此我得到:

错误:arrayfun:当UniformOutput=true时,所有值都必须是标量

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

重塑(cell2mat(arrayfun(@(x)x.b(1:2),p,“UniformOutput”,false)),2,2)

有更简单的方法吗?

如果参数val位于另一个字符串输入参数之后 “UniformOutput”设置为true(默认值),然后指定函数 func必须返回一个元素,然后将该元素连接到 返回值和类型为矩阵

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

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

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

但细胞转化步骤将继续。(同时,请注意引号和复数。)

您真正想做什么?你写“我想对它们统一应用一个函数”,但你所做的只是在你的例子中建立索引。顺便说一句,还有
structfun
我想将一个函数(包括从structs中选择一个字段)应用到数组的所有元素,就像函数编程中的
map
<代码>结构乐趣
不是我想要的,因为它会迭代所有字段。我希望始终选择同一字段。