我正在使用Octave,并希望将一个接受单个实数作为输入并输出固定长度行向量的函数矢量化。我了解到,从其不清晰的文档中可以使用
arrayfun
来完成这项工作。从Octave 3.2的help arrayfun
中得知:
如果在进一步的字符串输入参数“UniformOutput”之后设置参数VAL为“true”(默认值),则命名函数FUNC必须返回一个单元素,然后将被连接到返回值中并且是矩阵类型。否则,如果该参数设置为“false”,则输出将连接在单元格数组中。
然而,似乎Matlab的版本更加宽容:
= arrayfun(func,A1,...,An) 调用由函数句柄func指定的函数,并传递来自数组A1,...,An的元素,其中n是函数func的输入数量。 输出数组B1,...,Bm(其中m是函数func的输出数),包含来自函数调用的组合输出。第i次迭代对应于语法[B1(i),...,Bm(i)] = func(A1 {i},...,An {i})。 arrayfun函数不按特定顺序执行对函数func的调用。这似乎在Matlab中有效,但在Octave中无效。我正确吗?是否有更聪明的方法可以实现此目标而不使用非向量化循环?octave:5> nums
nums =@(c) ([c, c + 2, c + 4])
octave:6> arrayfun(nums,[1,2,3])
错误:cellfun期望UniformOutput=true时所有值都为标量
错误:调用自:
错误: /opt/local/share/octave/3.2.4/m/general/arrayfun.m,第168行,第21列
octave:6>
arrayfun
?试试简单的for
循环,然后就完成了。 - Shai