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
<代码>结构乐趣
不是我想要的,因为它会迭代所有字段。我希望始终选择同一字段。