具有从特定值到零的梯度的矩阵

时间:2015-04-28 09:38:41

标签: r matrix

我想创建一个矩阵,它在"左下角"转弯它的最大值(例如10)并且在"右下角"和"左上角"角0作为其值。矩阵应填充从最大值到1的值,然后用零填充。

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

3 个答案:

答案 0 :(得分:7)

根据我的理解,这可以这样做:

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

解决方案2 sapplypmax

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)一样。

答案 1 :(得分:5)

m[lower.tri(m, diag = T)] <- sequence(10:1)

答案 2 :(得分:4)

Private void RemoveRow()
  {
   for(int i = dtTable.Rows.Count-1; i >= 0; i--)
   {
   DataRow dr = dtTable.Rows[i];
   if (dr["name"] == comboBox1.Text) // name is the column name
    dr.Delete();
   }
  }