假设我有一个numpy数组。我想在子矩阵蒙版中将NOT的索引设置为0。
import numpy as np
mtrx = np.arange(25).reshape(5,5)
mask = mtrx[1:4, 1:4]
当然这是错误的:
mtrx[~mask] = 0
我想要的结果
[[ 0 0 0 0 0]
[ 0 6 7 8 0]
[ 0 11 12 13 0]
[ 0 16 17 18 0]
[ 0 0 0 0 0]]
答案 0 :(得分:3)
一种方法是索引零数组并添加原始数组中索引的值:
s = np.s_[1:4,1:4]
out = np.zeros_like(mtrx)
out[s] = mtrx[s]
print(out)
array([[ 0., 0., 0., 0., 0.],
[ 0., 6., 7., 8., 0.],
[ 0., 11., 12., 13., 0.],
[ 0., 16., 17., 18., 0.],
[ 0., 0., 0., 0., 0.]])
答案 1 :(得分:1)
您可以将矩阵乘以一个掩码,例如:
import numpy as np
mtrx = np.arange(25).reshape(5,5)
mask = np.zeros((5,5))
mask[1:4,1:4] = 1
mask
>>>array([[0., 0., 0., 0., 0.],
[0., 1., 1., 1., 0.],
[0., 1., 1., 1., 0.],
[0., 1., 1., 1., 0.],
[0., 0., 0., 0., 0.]])
mtrx * mask
>>> array([[ 0., 0., 0., 0., 0.],
[ 0., 6., 7., 8., 0.],
[ 0., 11., 12., 13., 0.],
[ 0., 16., 17., 18., 0.],
[ 0., 0., 0., 0., 0.]])
答案 2 :(得分:1)
一个选项是将行和列设置为零。
import numpy as np
mtrx = np.arange(25).reshape(5,5)
mtrx[:1] = 0
mtrx[-1:] = 0
mtrx[:,:1] = 0
mtrx[:, -1:] = 0
print(mtrx)
#output
#[[ 0 0 0 0 0]
# [ 0 6 7 8 0]
# [ 0 11 12 13 0]
# [ 0 16 17 18 0]
# [ 0 0 0 0 0]]