首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对称矩阵中每个单元格中值的组合

对称矩阵中每个单元格中值的组合
EN

Stack Overflow用户
提问于 2018-06-20 10:47:39
回答 2查看 74关注 0票数 1

我有一个权向量,我想要插入一个对称矩阵。我想要所有的重量组合(所有的重量在所有的位置,但不是在对角线)

我试着迭代这个矩阵,但是我只得到了相同的矩阵三份。(我也找不到答案,也找不到这个问题的公共解决方案。)

代码语言:javascript
复制
weight <- seq(0.1, 1, by = 0.1)
C <- matrix(0, nrow = 3, ncol = 3)
for (i in seq_len(nrow(C))) {
  C_old <- C
  for (j in seq_len(i)) {
    if (i == j) {
      C[i, i] <- 0
    } else {
      C_old2 <- C_old
      for (w in weight) {
        C[i, j] <- w
        C[j, i] <- C[i, j]
        C_old[i, j] <- w
        C_old[j, i] <- C_old[i, j]
        C_old2[i, j] <- w
        C_old2[j, i] <- C_old2[i, j]
        iter <- iter + 3
        print(C)
        print(C_old)
        print(C_old2)
      }
   }
}

我想要所有的矩阵

代码语言:javascript
复制
Matrix 0:

0 0 0
0 0 0
0 0 0 


Matrix 1:

0 0 0
0 0 0.1
0 0.1 0 

Matrix 2:

0 0 0.1
0 0 0.1
0.1 0.1 0 


Matrix 3:

0 0.1 0.1
0.1 0 0.1
0.1 0.1 0 

Matrix 4:

0 0.1 0.1
0.1 0 0.2
0.1 0.2 0 


Matrix n:

0 0.9 0.1
0.5 0 0.5
0.1 0.9 0 


Matrix:

0 x y
z 0 z
y x 0 

我希望最后一个矩阵的所有组合都是x,y和z可以是任何权值。

第一个矩阵(全部为0)并不是很重要,所以如果一个解决方案忽略了它,我并不关心

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-06-20 13:21:19

多亏了LAP,我改变了方法,并设法做到了:

代码语言:javascript
复制
weight <- seq(0.1, 1, by = 0.1)
C <- matrix(0, nrow = 3, ncol = 3)
C_list <- vector("list", 10)
names(C_list) <- as.character(weight)

for(i1 in weight){
  C_list[[as.character(i1)]] <- vector("list", 10)
  names(C_list[[as.character(i1)]]) <- as.character(weight)
  for (i2 in weight){
    C_list[[as.character(i1)]][[as.character(i2)]] <- vector("list", 10)
    names(C_list[[as.character(i1)]][[as.character(i2)]]) <- as.character(weight)
    for (i3 in weight) {
      C[2, 3] <- i1
      C[3, 2] <- i1
      C[1, 3] <- i2
      C[3, 1] <- i2
      C[1, 2] <- i3
      C[2, 1] <- i3
      C_list[[as.character(i1)]][[as.character(i2)]][[as.character(i3)]] <- C
    }
  }
}

现在,C_list是每个列表都有一个矩阵的列表列表。length(unlist(unlist(C_list, recursive = FALSE), recursive = FALSE)) == 1000,它是存在的10^3组合。

票数 1
EN

Stack Overflow用户

发布于 2018-06-20 12:23:47

我不知道你想要做什么,但你要做的是:

代码语言:javascript
复制
weight <- seq(0.1, 1, by = 0.1)
C <- matrix(0, nrow = 3, ncol = 3)
C_list <- vector("list", 10)

for(i in 1:length(weight)){
  for(j in 1:3){
    if(j == 1){
      C[2,3] <- weight[i]
      C[3,2] <- weight[i]
    }
    if(j == 2){
      C[1,3] <- weight[i]
      C[3,1] <- weight[i]
    }
    if(j == 3){
      C[1,2] <- weight[i]
      C[2,1] <- weight[i]
    }
    C_list[[i]][[j]] <- C
  }
}

结果:

代码语言:javascript
复制
> C_list
[[1]]
[[1]][[1]]
     [,1] [,2] [,3]
[1,]    0  0.0  0.0
[2,]    0  0.0  0.1
[3,]    0  0.1  0.0

[[1]][[2]]
     [,1] [,2] [,3]
[1,]  0.0  0.0  0.1
[2,]  0.0  0.0  0.1
[3,]  0.1  0.1  0.0

[[1]][[3]]
     [,1] [,2] [,3]
[1,]  0.0  0.1  0.1
[2,]  0.1  0.0  0.1
[3,]  0.1  0.1  0.0


[[2]]
[[2]][[1]]
     [,1] [,2] [,3]
[1,]  0.0  0.1  0.1
[2,]  0.1  0.0  0.2
[3,]  0.1  0.2  0.0

[[2]][[2]]
     [,1] [,2] [,3]
[1,]  0.0  0.1  0.2
[2,]  0.1  0.0  0.2
[3,]  0.2  0.2  0.0

..。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50946409

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档