【问题标题】:Matrix with gradient ranging from certain value to zero梯度范围从某个值到零的矩阵
【发布时间】:2015-04-28 09:38:40
【问题描述】:

我想创建一个矩阵,它的“左下角”是最大值(例如 10),“右下角”和“左上角”的值是 0。矩阵应填充从最大值到一的值,然后填充零。

##e.g. start with this
m <- matrix(ncol = 10, nrow = 10)
m[,1] <- 1:10
m[10, ] <- 10:1

类似于填充矩阵的最有效方法是什么

## 1 0 0 0
## 2 1 0 0 
## 3 2 1 0
## 4 3 2 1 

【问题讨论】:

  • 你能显示预期的输出吗?你不需要一个 10*10 的矩阵,4*4 就足够了。

标签: r matrix


【解决方案1】:

据我了解,这可以像这样完成:

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

它也可以看作是 Toeplitz 矩阵的一部分,参见?toeplitz


我误解了解释!这个例子帮助很大。 为了匹配示例,有很多可能的解决方案。

toeplitz 的解决方案 1

n <- 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

使用sapplypmax 的解决方案2

sapply((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

注意:稍加调整,pmax 可以放在sapply 之外,就像在pmax(-sapply((1:n)-1, "-", 1:n),0) 中一样。

【讨论】:

    【解决方案2】:
    m[lower.tri(m, diag = T)] <- sequence(10:1)
    

    【讨论】:

      【解决方案3】:
      lower.tri(m, diag=T) %*% lower.tri(m, diag=T)
      
      #      [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
      # [1,]    1    0    0    0    0    0    0    0    0     0
      # [2,]    2    1    0    0    0    0    0    0    0     0
      # [3,]    3    2    1    0    0    0    0    0    0     0
      # [4,]    4    3    2    1    0    0    0    0    0     0
      # [5,]    5    4    3    2    1    0    0    0    0     0
      # [6,]    6    5    4    3    2    1    0    0    0     0
      # [7,]    7    6    5    4    3    2    1    0    0     0
      # [8,]    8    7    6    5    4    3    2    1    0     0
      # [9,]    9    8    7    6    5    4    3    2    1     0
      #[10,]   10    9    8    7    6    5    4    3    2     1
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-10-09
        • 1970-01-01
        • 1970-01-01
        • 2018-03-28
        • 1970-01-01
        • 2022-11-29
        相关资源
        最近更新 更多