【发布时间】:2013-05-14 22:21:33
【问题描述】:
我有以下功能
f <- function(x){sum(g(x - X))}
在哪里
X - n-dimensional vector with some data
g is some vecrtorized function
如何对函数 f 进行矢量化处理,以便它可以接受 n 维输入并产生 n 维输出?
我正在尝试以下方法
rowSums(sapply(x, "-", X))
这种方法的问题在于它没有涵盖一维x的情况。是否可以涵盖这两种情况?比如让
x <- c(1,2,3)
X <- c(6,9,1)
g <- function(x){x^2}
如果我使用基于sapply 的代码,我会得到正确答案(n 维向量)
rowSums(sapply(x, "-", X))
[1] -12 -21 3
但如果我设置 x=1 并运行相同的代码,我会得到错误的答案(n 维向量而不是标量)
rowSums(sapply(x, "-", X))
[1] -5 -8 0
这并不奇怪,因为rowSums 应用于列向量会给出列向量。对于一维x,我需要的是应用sum。有没有不使用if 以尺寸为条件的优雅方法?
【问题讨论】:
-
您可能应该为您谈论的两种情况添加示例输入/输出。
-
sapply并不是真正的矢量化,它只是一个伪装的 for 循环。在我看来,您可能想要outer,但正如 Dason 所说,预期的输出会有所帮助。 -
你的术语让我很困惑。您只显示了一维的
x和X。我认为“向量”是一维的。你说的是数组(更高维度)还是长度大于 1 的向量? -
我的意思是向量是 n 维的,就像
R^n的元素和一维的标量,就像R的元素。那就是当提到维度时我在谈论向量长度。 -
@baptiste:谢谢,这正是我需要的。
标签: r vectorization