Как изменить индекс всех 1 в массиве 2d numpy, который имеет только 0 и 1? - PullRequest
0 голосов
/ 18 июня 2020

У меня есть массив 2d numpy (arr), в котором есть только нули и единицы.

Например, массив 2d numpy в форме (h, w).

Я хочу изменить размер массива до формы (h // scale, w // scale), и мне нужно сохранить все единицы.

# arr is a 2d numpy array
h, w = arr.shape
h_new, w_new = h // scale, w // scale
arr_new = np.zeros((h_new, w_new))
for i in range(h):
    for j in range(w):
        if arr[i, j] == 1:
            arr_new[i // scale, j // scale] = 1

Например, 2d-массив, подобный этому, и scale = 2:

[
    [0,0,0,0],
    [0,1,0,0],
    [1,0,0,1],
    [0,0,0,1]
]

После запуска кода arr_new будет:

[
    [1,0],
    [1,1]
]

изменение всех координат единиц:

(1,1) -> (0,0)
(2,0) -> (1,0)
(2,3) -> (1,1)
(3,3) -> (1,1)

Есть ли лучший способ сделать это?

Спасибо.

1 Ответ

0 голосов
/ 18 июня 2020

Просто измените форму массива, разделив каждое измерение на сетку (SIZE // SCALE, SCALE). Затем уменьшите все размеры размера SCALE, используя max(), чтобы позволить 1 доминировать над ячейкой SCALExSCALE.

arr.reshape(h//scale, scale, w // scale, scale).max(axis=(1,3))

Обратите внимание, что это решение требует, чтобы форма array была кратностью os (scale, scale).

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