Как установить число не в подматрице матрицы - PullRequest
1 голос
/ 16 октября 2019

Предположим, у меня есть массив 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]]

Ответы [ 3 ]

3 голосов
/ 16 октября 2019

Один из способов заключается в индексации массива нулей и добавлении значений из исходного индексированного массива:

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 голос
/ 16 октября 2019

Один из вариантов - установить строки и столбцы в нули.

   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]]
1 голос
/ 16 октября 2019

Матрицу можно умножить на маску, например:

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.]])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...