r - 如何计算 R 中多个向量组合的乘积?

标签 r vector combinations permutation multiplication

虽然我已经尽力了,但我觉得很难给出一个准确的标题。这是我的问题。

a = 1/(1:10)
b = 3/(1:10)
c = 1/(1:5)
d = 1/(1:11)

我想得到一个向量 e,这样 e 包含根据从 a 中选择的值的组合计算的乘积, bcd

例如,假设有两个向量 {1, 2}{3, 4},我想得到一个这样的向量 { 1 * 3, 1 * 4, 2 * 3, 2 * 4} = {3, 4, 6, 8}

提前致谢!

最佳答案

expand.grid solution没问题,但在数学中有一个优雅的克罗内克积

R 有一个函数 kronecker , 但一次需要两个向量,所以我们需要 Reduce对于递归应用程序:

oo <- Reduce(kronecker, list(a, b, c, d))

或者,使用 outer (kronecker 的主力):

rr <- Reduce(outer, list(a, b, c, d))

这对用户更友好,如rr[i, j, u, v]给你a[i] * b[j] * c[u] * d[v] .


备注1

请注意 oo 中的元素和 rr顺序不同。因为对于两个向量 ab :

kronecker(a, b)  ## a[1] * b, a[2] * b ...
outer(a, b)      ## a * b[1], a * b[2] ...

因此下面使用kronecker产生与 rr 相同的结果.

zz <- Reduce(kronecker, list(d, c, b, a))
dim(zz) <- c(length(a), length(b), length(c), length(d))

备注2

该方法可以改编为a[i] + b[j] + c[u] + d[v] , 通过替换默认操作 "*"outerkronecker"+" .例如:

Reduce(function (x, y) outer(x, y, "+"), list(a, b, c, d))

备注3

johannes's answer可以改进。 apply 的行式应用是一个性能 killer 。我们可以执行以下操作以获得与 rr 一致的结果.

xx <- Reduce("*", expand.grid(a, b, c, d))
dim(xx) <- c(length(a), length(b), length(c), length(d))

关于r - 如何计算 R 中多个向量组合的乘积?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51849309/

相关文章:

c++ - 是否可以在运行时迭代 mpl::vector 而不实例化 vector 中的类型?

r - 如何拆分不同列表中的非连续数字

algorithm - 无标记的排列组合。就像将几个元素尽可能均匀地分配到几个组中

algorithm - 如何找到帕斯卡三角形中重复的数字的次数?

R (xlsx) - 自动创建边框

r - 如何计算R中的randomForest训练AUC

Java/JavaME : Quicker geometric vector addition

r - 根据不同列的值在列中搜索

r - 将曲线添加到 R 中的散点图

algorithm - 固定号码的乐透组合公式?