gpt4 book ai didi

r - 快速获取所有矩阵列元素乘积对的方法

转载 作者:行者123 更新时间:2023-12-04 23:16:28 26 4
gpt4 key购买 nike

假设我有一个数字 matrix :

set.seed(1)
mat <- matrix(rnorm(1000), ncol = 100)

我想生成所有向量,这些向量是 mat 中所有唯一向量对的元素乘积的结果。 .

我们如何改进以下代码:
all.pairs <- t(combn(1:ncol(mat), 2))

res <-
do.call(cbind,
lapply(1:nrow(all.pairs),
function(p) mat[, all.pairs[p, 1]] * mat[, all.pairs[p, 2]]))

最佳答案

我们可以这样做:

n <- ncol(mat)
lst <- lapply(1:n, function (i) mat[,i] * mat[,i:n])
do.call(cbind, lst)

或者,这是一种更快的方法:
n <- ncol(mat)
j1 <- rep.int(1:n, n:1)
j2 <- sequence(n:1) - 1L + j1
mat[, j1] * mat[, j2]

请注意,以上将包括一列与其自身的乘法。如果你想禁止它,请使用
n <- ncol(mat)
lst <- lapply(1:(n-1), function (i) mat[,i] * mat[,(i+1):n])
do.call(cbind, lst)


n <- ncol(mat)
j1 <- rep.int(1:(n-1), (n-1):1)
j2 <- sequence((n-1):1) + j1
mat[, j1] * mat[, j2]

其实, j1j2上面创建的只是 combn(1:ncol(mat),2) 的第一行和第二行.所以,如果你还想留下 combn , 用
all.pairs <- combn(1:ncol(mat),2)
mat[, all.pairs[1,]] * mat[, all.pairs[2,]]

关于r - 快速获取所有矩阵列元素乘积对的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40139534/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com