Значение numpy.ndarray нельзя сравнивать с оператором if - PullRequest
0 голосов
/ 03 марта 2019

Я сейчас работаю над проектом обработки тензорного потока.Идентифицированы три типа объектов: 1 (автомобиль), 2 (автобус) и 3 (фургон), представленные как s_class.Обнаруженный выходной объект / objetcs дается s_class, который является numpy.ndarray.Когда я печатаю номер обнаруженного объекта,

(boxes, scores, classes, num) = sess.run(
    [detection_boxes, detection_scores, detection_classes, num_detections],
    feed_dict={image_tensor: frame_expanded})
s_class = classes[scores > 0.6]
print(s_class)

, он выдает вывод типа

>>[2.]    #bus is detected
  [3. 2. 1.]    #all three objects(van,bus,car) are detected
  [1. 2. 3.]    
  [1. 2. 3.]
  [1. 2. 3.]
  [2. 1. 3.]
  [2. 1. 3.]
  [2. 1. 3.]
  [2. 1. 3.]
  [2. 3. 1.]
  [2. 3. 1.]
  []              #nothing is detected
  [2.]            #only second object is detected
  []
  [1.]            #only first object is detected

и продолжает ... Объекты не представлены в массиве в упорядоченном порядке (например,: - [1. 2. 3.] или [2. 1. 3.] ... и т. Д. - это меняет положение) Мне нужно вывести «ok», если объект 1 обнаружен, и «notok», когда объект 2 и/ или 3 обнаружено.Также объект 1 обнаруживается с объектом 2 и / или 3, на нем должно быть напечатано «notok».Я пытался,

if (s_class==1):
    print("ok")
elif (s_class==2 or s_class==3):
    print("notok")
elif (s_class==1 and (s_class==2 or s_class==3)):
    print("notok")
elif (s_class==1 and s_class==2 and s_class==3 ):
    print("notok")

Это не работает.Как я могу сравнить этот numpy.ndarray с вышеуказанными условиями?

1 Ответ

0 голосов
/ 03 марта 2019

Вы можете сравнить, используя in.

x = np.array([[1, 2, 3], [4, 5, 6]], np.int32)
x0 = x[0] #array([1, 2, 3])

#True
1 in x0 and 2 in x0

#True
1 in x0 or 2 in x0

#False
1 in x0 and 4 in x0
...