【发布时间】:2013-12-28 07:38:20
【问题描述】:
我正在使用 Octave 并希望对一个函数进行向量化,该函数接受单个实数作为输入并输出固定长度的行向量。我知道arrayfun 应该能够从其不清楚的文档中做到这一点。来自 Octave 3.2 中的 help arrayfun:
如果参数 VAL 在另一个字符串输入参数之后 “UniformOutput”设置为“true”(默认),然后命名为 函数 FUNC 必须返回一个元素,然后将 连接到返回值并且是矩阵类型。 否则,如果该参数设置为“假”,则输出 连接在一个元胞数组中。
但似乎Matlab's version is more forgiving:
[B1,...,Bm] = 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 中使用 arrayfun 执行这种概括?有没有更聪明的方法可以在不使用非向量化循环的情况下实现这一点?
作为参考,这是我的 Octave 结果:
八度:5> 数字
数字=@(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 列
八度:6>
【问题讨论】:
-
你为什么要坚持
arrayfun?尝试简单的for循环并完成它。 -
@djechlin: stackoverflow.com/questions/12522888/…
-
@DanielR 该答案适用于 Matlab,并且 OP 已明确表示他正在使用 Octave。建议他使用 for 循环没有。
标签: matlab octave vectorization