Как изменить массив Numpy на основе массива маски? - PullRequest
0 голосов
/ 03 ноября 2019

У меня есть массив data_set, размер: (172800,3) и массив масок, размер (172800) состоит из 1 и 0. Я хотел бы заменить массив формы data_set на основе значений (0 или 1) в массиве маски на значение, определенное мной: например: [0,0,0] или [128,16,128].

Iпопробовал, функция "np.placed", но здесь проблема в неправильном размере массива маски.

Я также проверил более питонический способ: data_set [mask] = [0,0,0] он работал нормально, но для некоторого смысла только для 2 первых элементов.

data_set[mask]= [0,0,0]

data_set = np.place(data_set, mask, [0,0,0])

MyОжидаемый результат - изменить значение элемента в матрице data_set на [0,0,0], если значение маски равно 1.

ex.

data_set = [[134,123,90] , [234,45,65] , [32,233,45]]
mask = [ 1, 0, 1]

output = [[0,0,0] , [234, 45,65] , [0,0,0]]

1 Ответ

0 голосов
/ 03 ноября 2019

Когда вы пытаетесь проиндексировать свои данные с помощью mask, numpy предполагает, что вы предоставляете ему список индексов. Используйте логические массивы или преобразуйте вашу маску в список индексов:

import numpy as np

data_set = np.array([[134,123,90] , [234,45,65] , [32,233,45]])
mask = np.array([1, 0, 1])
val = np.zeros(data_set.shape[1])

data_set[mask.astype(bool),:] = val
# or
data_set[np.where(mask),:] = val

Первый преобразует ваш массив целых в массив bools, а второй создает список индексов, где маскане ноль.

Вы можете установить val на любое нужное вам значение, если оно соответствует оставшемуся размеру набора данных (в данном случае 3).

...