Измените все значения, равные x на y - PullRequest
0 голосов
/ 22 апреля 2019

У меня очень простая задача, которую я не могу понять, как это сделать в numpy.У меня есть 3-х канальный массив и везде, где значение массива не равно (1,1,1) Я хочу преобразовать это значение массива в (0,0,0).

Так что следующее:

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

Должно изменитьсяto:

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

Как мне этого добиться в numpy?Следующее не дает желаемых результатов:

# my_arr.dtype = uint8
my_arr[my_arr != (1,1,1)] = 0
my_arr = np.where(my_arr == (1,1,1), my_arr, (0,0,0))

Ответы [ 2 ]

3 голосов
/ 22 апреля 2019

Используйте numpy.array.all(1) для фильтрации и назначения 0:

import numpy as np

arr = np.array([[0,1,1],
 [1,1,1],
 [1,0,1]])
arr[~(arr == 1).all(1)] = 0

Выход:

array([[0, 0, 0],
       [1, 1, 1],
       [0, 0, 0]])

Объясните:

  • arr==1: возвращает массив bool с, которые удовлетворяют условию (здесь это 1)
  • all(axis=1): возвращает массив bool с, если в каждой строке есть все True (то есть все строки, которые равны 1`
  • ~(arr==1).all(1): выбирает строки, которые не все 1
0 голосов
/ 22 апреля 2019

Это просто сравнение двух списков.

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

for i in range(len(x)):

    if x[i] != [1,1,1]:
        x[i] = [0,0,0]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...