我有一个numpy ndarray(M
),其中包含一个包含N x N个数字(N是整数)的2D对称矩阵,例如
[[1. 2. 0. 0. 2. 2. 2.]
[2. 1. 2. 0. 0. 2. 2.]
[0. 2. 1. 2. 0. 0. 2.]
[0. 0. 2. 1. 2. 0. 0.]
[2. 0. 0. 2. 1. 2. 0.]
[2. 2. 0. 0. 2. 1. 2.]
[2. 2. 2. 0. 0. 2. 1.]]
我想检查一下:将M中的项i,j设置为0,将i + 1,i + 2,i + 3中的j设置为M中的零
我有此代码,可以这样做:
for i in range(len(M)):
for j in range(len(M)):
if M[i, j] != 0:
if j == len(M) - 3:
M[i, j+2] = 0
M[i, j+1] = 0
elif j == len(M) - 2:
M[i, j+1] = 0
elif j == len(M) - 1:
continue
else:
M[i, j + 3] = 0
M[i, j + 2] = 0
M[i, j + 1] = 0
else:
continue
它工作得很好,但是我想减少我的if语句。我读过M[i,j:j+3]
,但我真的不知道如何使用它。
我正在等待以下输出矩阵:
[[1. 0. 0. 0. 2. 0. 0.]
[2. 0. 0. 0. 0. 2. 0.]
[0. 2. 0. 0. 0. 0. 2.]
[0. 0. 2. 0. 0. 0. 0.]
[2. 0. 0. 0. 1. 0. 0.]
[2. 0. 0. 0. 2. 0. 0.]
[2. 0. 0. 0. 0. 2. 0.]]
答案 0 :(得分:0)
这应该有效:
for i in range(len(M)):
for j in range(len(M)):
if M[i, j] != 0:
M[i, (j+1):(j+4)] = 0
print (M)
输出:
[[1. 0. 0. 0. 2. 0. 0.]
[2. 0. 0. 0. 0. 2. 0.]
[0. 2. 0. 0. 0. 0. 2.]
[0. 0. 2. 0. 0. 0. 0.]
[2. 0. 0. 0. 1. 0. 0.]
[2. 0. 0. 0. 2. 0. 0.]
[2. 0. 0. 0. 0. 2. 0.]]