gpt4 book ai didi

r - 如何对矩阵中所有行的组合求和?

转载 作者:行者123 更新时间:2023-12-02 16:58:32 28 4
gpt4 key购买 nike

我正在寻找矩阵中所有可能的行组合的总和。与 rowSums() 函数类似的函数,但它不会生成 nrow() 和,而是生成 nrow() ^ nrow() 和。

例如:

set.seed(10)
dummymat <- matrix(floor(runif(9, 0, 2)), nrow = 3, ncol = 3)

产生矩阵:

     [,1] [,2] [,3]
[1,] 1 1 0
[2,] 0 0 0
[3,] 0 0 1

为了找到矩阵的每个可能的行和,可以编写以下非常低效的代码:

allrowsums <- c()

for(i in 1:nrow(dummymat)) {
firstcolval <- dummymat[i,1]
for(j in 1:nrow(dummymat)) {
secondcolval <- dummymat[j,2]
for(k in 1:nrow(dummymat)) {
thirdcolval <- dummymat[k,3]
rowsum <- firstcolval + secondcolval + thirdcolval
allrowsums <- append(allrowsums,rowsum)
}
}
}

输出如下:

[1] 2 2 3 1 1 2 1 1 2 1 1 2 0 0 1 0 0 1 1 1 2 0 0 1 0 0 1

对于更大的矩阵,我可以编写哪些更简洁的代码?

最佳答案

您可以使用expand.grid创建按列元素的所有组合的数据框。

dummymat_expand <- expand.grid(x=dummymat[,1], y=dummymat[,2], z=dummymat[,3])

从这里,您只需调用 rowSums 即可获取所有可能的总和组合。

rowSums(dummymat_expand)

编辑以回答问题。要将代码应用于具有可变列长度的矩阵,请注意 expand.grid 可以将向量、因子或列表作为输入。因此,您可以创建一个列元素列表以提供给 expand.grid

# create a list of column elements
dummymat_column_list <- lapply(1:ncol(dummymat), function(x) dummymat[, x])
expand.grid(dummymat_column_list)

关于r - 如何对矩阵中所有行的组合求和?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46763646/

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