我有一个关于修改矩阵的问题。我已设法根据值更改矩阵中的值 当它们具有相同尺寸时的另一个矩阵。但现在我需要将此过程应用于矩阵 不同的尺寸。换句话说,我想对一个"区域应用一些更改"取决于更大的矩阵 关于较小的值的值,请记住我知道较小矩阵的位置 更大的。
假设这是矩阵A
1 2 3 4 5 6 7 8
1 2 3 4 5 6 7 8
1 2 3 4 5 6 7 8
1 2 3 4 5 6 7 8
1 2 3 4 5 6 7 8
和B
0 0 0 0 0 0
0 1 1 1 1 0
0 0 1 1 1 0
0 0 1 1 0 0
0 0 0 0 0 0
我知道B [1,1]是我必须检查修改A [2,1]的值,B [2,1]代表A [3,1]等等......
我正在寻找的最终结果是
1 2 3 4 5 6 7 8
1 2 0 0 0 0 7 8
1 2 3 0 0 0 7 8
1 2 3 0 0 6 7 8
1 2 3 4 5 6 7 8
对于A值替换,我在原始脚本中使用for循环
for(i in 1:10)A [B == i] = 0
在A和B具有相同尺寸时有效。
如何在矩阵A中进行替换?应用?一个for循环?
任何帮助都会受到赞赏,当然你可以给我指点一些我还没读过的基本读物。
答案 0 :(得分:2)
只需选择子矩阵并执行您想要的操作,即:
A[1:5,2:8][B == 1] = 0
或者,通常,如果[row,col]是矩阵A中矩阵B的起始位置:
A[row:nrow(A),col:ncol(A)][B == 1] = 0
以下是测试代码,以便您检查它是否有效:
A = matrix(rep(1:8, each = 5), nrow = 5)
B = matrix(c(rep(0, 7), 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, rep(0, 8)), nrow = 5, byrow = TRUE)
A[1:5,2:8][B == 1] = 0
感谢Andrie ho for hinting me the ncol
function而不是丑陋的昏暗(A)[2] ......