我想创建一个矩阵,它在"左下角"转弯它的最大值(例如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
答案 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
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
sapply
和pmax
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();
}
}