gpt4 book ai didi

r - 如何将向量中对角线的值插入R中的矩阵?

转载 作者:行者123 更新时间:2023-12-04 03:27:06 25 4
gpt4 key购买 nike

我需要将向量对角线插入任意位置的矩阵中。我知道如何垂直或水平插入向量,但不能对角插入。

我有:

A <- matrix(nrow=6,ncol=6)
b <- c(1:4)

所需的结果(如果我想将向量插入到 A[3,2]的位置),将是:
     [,1] [,2] [,3] [,4] [,5] [,6]
[1,] NA NA NA NA NA NA
[2,] NA NA NA NA NA NA
[3,] NA 1 NA NA NA NA
[4,] NA NA 2 NA NA NA
[5,] NA NA NA 3 NA NA
[6,] NA NA NA NA 4 NA

另外,我希望能够插入向量以获得此矩阵(从 A[4,1]开始):
     [,1] [,2] [,3] [,4] [,5] [,6]
[1,] NA NA NA 4 NA NA
[2,] NA NA 3 NA NA NA
[3,] NA 2 NA NA NA NA
[4,] 1 NA NA NA NA NA
[5,] NA NA NA NA NA NA
[6,] NA NA NA NA NA NA

最佳答案

您可以使用此功能:

insert.diag <- function(A,b,start=c(1,1),dir=c(1,1)) {
sq <- seq_along(b)-1
indices <- sapply(1:2,function(i) start[i] + dir[i]*sq)
stopifnot(all(indices>0))
stopifnot(all(indices[,1]<=nrow(A)))
stopifnot(all(indices[,2]<=ncol(A)))
A[indices] <- b
A
}

一些使用示例:
A <- matrix(nrow=6,ncol=6)
b <- c(1:4)

> insert.diag(A,b,c(1,6),c(1,-1))
[,1] [,2] [,3] [,4] [,5] [,6]
[1,] NA NA NA NA NA 1
[2,] NA NA NA NA 2 NA
[3,] NA NA NA 3 NA NA
[4,] NA NA 4 NA NA NA
[5,] NA NA NA NA NA NA
[6,] NA NA NA NA NA NA
> insert.diag(A,b,c(6,6),c(-1,-1))
[,1] [,2] [,3] [,4] [,5] [,6]
[1,] NA NA NA NA NA NA
[2,] NA NA NA NA NA NA
[3,] NA NA 4 NA NA NA
[4,] NA NA NA 3 NA NA
[5,] NA NA NA NA 2 NA
[6,] NA NA NA NA NA 1
> insert.diag(A,b,c(1,1),c(1,1))
[,1] [,2] [,3] [,4] [,5] [,6]
[1,] 1 NA NA NA NA NA
[2,] NA 2 NA NA NA NA
[3,] NA NA 3 NA NA NA
[4,] NA NA NA 4 NA NA
[5,] NA NA NA NA NA NA
[6,] NA NA NA NA NA NA

关于r - 如何将向量中对角线的值插入R中的矩阵?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28746023/

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