gpt4 book ai didi

按行用 0 替换矩阵范围

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

我希望替换 matrix 的每一行的部分与 0 .保留指定范围内的部分。要保留的指定范围因行而异。我可以用嵌套的 for-loops 做到这一点.

但是,我认为必须有一种简单的方法,也许可以使用 apply陈述。

这是嵌套 for-loop 的示例解决方案。

my.matrix <- matrix(c( -5, -4, -3, -2, -1,
-2, -1, 0, 1, 2,
0, 1, 2, 3, 4,
-3, -2, -1, 0, 1), nrow = 4, byrow = TRUE)

# range to retain specified by the following two vectors
first.position <- c(2, 3, 2, 1)
last.position <- c(4, 5, 5, 1)

# desired result
desired.result <- matrix(c( 0, -4, -3, -2, 0,
0, 0, 0, 1, 2,
0, 1, 2, 3, 4,
-3, 0, 0, 0, 0), nrow = nrow(my.matrix), byrow = TRUE)

new.matrix <- matrix(0, nrow = nrow(my.matrix), ncol = ncol(my.matrix))

# solution using loops
for(i in 1:nrow(my.matrix)) {
for(j in 1:ncol(my.matrix)) {

if(j >= first.position[i] & j <= last.position[i]) new.matrix[i,j] = my.matrix[i,j]

}
}

all.equal(new.matrix, desired.result)
# [1] TRUE

最佳答案

例如,

# Produce a matrix with indices where my.matrix elements should be kept
L <- mapply(seq,first.position,last.position)
L2 <- sapply(1:length(L),function(i) cbind(i,L[[i]]))
z <- do.call(rbind,L2)

# create a helper matrix m2 and fill it with zeroes
m2 <- my.matrix*0
# set the protected elements to 1 and multiple element-wise with the original matrix
m2[z] <- 1
result <- m2*my.matrix

# [,1] [,2] [,3] [,4] [,5]
#[1,] 0 -4 -3 -2 0
#[2,] 0 0 0 1 2
#[3,] 0 1 2 3 4
#[4,] -3 0 0 0 0

关于按行用 0 替换矩阵范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37149133/

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