значение фильтра с использованием NumPy - PullRequest
1 голос
/ 15 октября 2019

У меня есть нулевая матрица и размер = (4, 8)

x = [[0, 0, 0 , 0, 0, 0, 0, 0],
     [0, 0, 0 , 0, 0, 0, 0, 0],
     [0, 0, 0 , 0, 0, 0, 0, 0],
     [0, 0, 0 , 0, 0, 0, 0, 0],]

Кроме того, у меня есть три разные матрицы.

a = [[1, 1, 1 , 1, 1, 1, 1, 1],
     [1, 1, 1 , 1, 1, 1, 1, 1],
     [1, 1, 1 , 1, 1, 1, 1, 1],
     [1, 1, 1 , 1, 1, 1, 1, 1],]

b = [[2, 2, 2 , 2, 2, 2, 2, 2],
     [2, 2, 2 , 2, 2, 2, 2, 2],
     [2, 2, 2 , 2, 2, 2, 2, 2],
     [2, 2, 2 , 2, 2, 2, 2, 2],] 

c = [[3, 3, 3 , 3, 3, 3, 3, 3],
     [3, 3, 3 , 3, 3, 3, 3, 3],
     [3, 3, 3 , 3, 3, 3, 3, 3],
     [3, 3, 3 , 3, 3, 3, 3, 3],]

Я хочу получить следующеерезультаты

output = [[1, 2, 1, 2, 1, 2, 1, 2],
          [2, 3, 2, 3, 2, 3, 2, 3],
          [1, 2, 1, 2, 1, 2, 1, 2],
          [2, 3, 2, 3, 2, 3, 2, 3],]

Значение матрица a отображается в (строка 0, строка 2) и (столбец 0, столбец 2, столбец 4, столбец 6)

Значение matrix b появляется в строке 0, строке 1, строке 2, строке 3, но в строке 0 и строке 2 значение 2 появляется в столбце 1, столбце 3, столбце 5, столбце 7далее в строке 1 и строке 3 значение 2 отображается в столбце 0, столбце 2, столбце 4, столбце 6

Значение matrix c отображается в (строка 1, строка3) и (столбец 1, столбец 3, столбец 5, столбец 7)

import numpy as np
h, w = x.shape
output = np.zeros((h, w))

for i in range(h):
    for j in range(w):
        if (i % 2) == 0 and (j % 2) == 0:
            output[i, j] = a[i, j]
        elif (i % 2) == 1 and (j % 2) == 1:
            output[i, j] = c[i, j]
        else:
            output[i, j] = b[i, j]
print(output)
'''  
output = [[1. 2. 1. 2. 1. 2. 1. 2.]
          [2. 3. 2. 3. 2. 3. 2. 3.]
          [1. 2. 1. 2. 1. 2. 1. 2.]
          [2. 3. 2. 3. 2. 3. 2. 3.]]
'''

Я хочу попытаться не использовать цикл for, могу ли я решить его с помощью numpy?

Ответы [ 2 ]

4 голосов
/ 15 октября 2019

Вы можете использовать np.choose:

y,x = np.ogrid[:4,:8]
np.choose((y&1)+(x&1),[a,b,c])
# array([[1, 2, 1, 2, 1, 2, 1, 2],
#        [2, 3, 2, 3, 2, 3, 2, 3],
#        [1, 2, 1, 2, 1, 2, 1, 2],
#        [2, 3, 2, 3, 2, 3, 2, 3]])
1 голос
/ 15 октября 2019

Вам нужно выбрать индексы, где строки и столбцы нечетные / четные соответственно. Это было объяснено здесь

import numpy as np
b = np.ones((4,8))*2

# update places where both row & column are even
b[::2,::2] -= 1
# update places where both row & column are odd
b[1::2,1::2] += 1

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...