Сравните значения массива numpy (Истинное значение массива с более чем одним элементом неоднозначно. Используйте a.any () или a.all ()) - PullRequest
0 голосов
/ 10 апреля 2020

Поэтому я использую генератор Keras, чтобы получить данные для сегментации изображения.

У меня есть указанная маска c, каждый набор пикселей которой представляет область моих масок, поэтому у меня должен быть диапазон Пиксель, который содержит 11 классов ( 0 и 255 и 191 ).

Проблема с генератором Keras в том, что он меняет диапазон пикселей.

, поэтому я хочу обнаружить изображения, интенсивность пикселей которых не равна моим указанным c классам (диапазон пикселей) (255,56, ...), и попытаться удалить их из моего набора данных, но я всегда получаю ошибки.

Y_train : numpy массив, содержащий все маски

Y_train  = array([[[[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, 0],
         [0, 0, 0]],  
         [[0, 0, 0],
         [0, 0, 0],
         [0, 0, 0],
           ...,
         [0, 0, 0],
         [0, 0, 0],
         [0, 0, 0]]]], dtype=uint8)

Я пробовал эту первую попытку:

for i in range(len(Y_train)):
    if Y_train[i] != 255 and Y_train[i] !=56 and Y_train[i] !=137 and Y_train[i] !=26 : 
          print ('index',i)

Второй:

for i in range (len(Y_train)):
   if Y_train[i][Y_train[i] != (0 and 255 and 56 and 137 and 26  and 87 and 112 and 191 and 212 and 164 and 229 and 244  )]  :
       print('index 0',i)

Третий:

for i in range(len(Y_train)):
    if (Y_train[I] != 255 and Y_train[i] !=56 and Y_train[i] !=137)).all() : print('index 0',i)

PS: Извините за мой Engli sh

Ответы [ 2 ]

1 голос
/ 10 апреля 2020

Я думаю, прежде всего вы должны изменить «и» с «или»; тогда вы уверены, что y_train [i] возвращает целочисленное значение? пожалуйста, дважды проверьте тип y_train [i] или самого y_train и попробуйте найти его элементы

0 голосов
/ 10 апреля 2020

Ваш массив Y_train выглядит как и список матриц rgb. ie Y_train имеет 4 размера. когда вы индексируете Y_train [i], вы получаете и 3-мерную матрицу, если вы сравните это с эскаларным числом, например 255, то вы получите ту же 3-мерную матрицу с True или False (True, где было 255 и False в противном случае), поэтому Для сравнения этой логической матрицы вам нужно использовать any () или all ().

Поэтому вам следует переосмыслить свой код, потому что этот способ не кажется эффективным

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