如何设置不在矩阵的子矩阵中的数字

时间:2019-10-16 07:25:06

标签: python numpy

假设我有一个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]]

3 个答案:

答案 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]]