我想创建一个矩阵,它在其"左下角"的角落中具有最大值(例如10),在"右下角"和"左上角"角落0中作为其值.矩阵应填充从最大值到1的值,然后用零填充.
##e.g. start with this
m <- matrix(ncol = 10, nrow = 10)
m[,1] <- 1:10
m[10, ] <- 10:1
Run Code Online (Sandbox Code Playgroud)
类似地填充矩阵的最有效方法是什么?
## 1 0 0 0
## 2 1 0 0
## 3 2 1 0
## 4 3 2 1
Run Code Online (Sandbox Code Playgroud)
根据我的理解,可以这样做,例如:
n <- 4
sapply((n:1)-1, "+", 1:n)
# [,1] [,2] [,3] [,4]
# [1,] 4 3 2 1
# [2,] 5 4 3 2
# [3,] 6 5 4 3
# [4,] 7 6 5 4
Run Code Online (Sandbox Code Playgroud)
它也可以看作是Toeplitz矩阵的一部分,见?toeplitz.
我误解了解释!这个例子帮了很多忙.为了匹配该示例,存在许多可能的解决方案.
toeplitzn <- 4
M <- toeplitz(1:n)
M[upper.tri(M)] <- 0
M
# [,1] [,2] [,3] [,4]
# [1,] 1 0 0 0
# [2,] 2 1 0 0
# [3,] 3 2 1 0
# [4,] 4 3 2 1
Run Code Online (Sandbox Code Playgroud)
sapply和pmaxsapply((1:n)-1, function(i) pmax((1:n)-i, 0) )
# [,1] [,2] [,3] [,4]
# [1,] 1 0 0 0
# [2,] 2 1 0 0
# [3,] 3 2 1 0
# [4,] 4 3 2 1
Run Code Online (Sandbox Code Playgroud)
注意:稍加调整,pmax可以放在外面sapply,如pmax(-sapply((1:n)-1, "-", 1:n),0).