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

2024-05-16 11:03:53 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我有一个numpy数组。我想为不在子矩阵掩码中的索引设置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]]

Tags: importnumpyas错误np矩阵mask数组
3条回答

可以将矩阵乘以遮罩,例如:

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.]])

一个选项是将行和列设置为零。你知道吗

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

一种方法是索引一个由零组成的数组,并从索引的原始数组中添加值:

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.]])

相关问题 更多 >