我在八度音程中有以下结构数组:
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)'
有更简单的方法吗?
答案 0 :(得分:0)
如果参数val后面还有一个字符串输入参数 “UniformOutput”设置为true(默认值),然后是命名函数 func必须返回一个元素,然后将其连接起来 返回值并且是矩阵类型。
统一输出意味着输入和输出的大小相同,而不是所有返回的值都相似。
你可以通过将报价隐藏到不同的位置来避免重塑:
cell2mat(arrayfun(@(x) x.b(1:2)',p,"UniformOutput",false))
cell2mat(arrayfun(@(x) x.b(1:2),p,"UniformOutput",false)')
但细胞转换步骤将保持不变。 (另外,请注意引号和复数。)