2016-01-01 5 views
3

Я новичок в python и создал небольшую функцию, которая выполняет кластерный анализ. Быстрое сокращение - мне приходится сравнивать два массива множество раз, пока он больше не изменится. Для этого я использовал цикл while, который петли, пока они не равны, но я нахожу, что получаю два разных результата: =, а не ==. MWE:Не оператор, кажется, неправильно в Python?

import numpy as np 

a = np.array([1,1,1]) 
b = np.array([1,2,1]) 

print((a != b).all()) 
print(not (a == b)) 
+5

В вашем примере вы хотели написать 'not (a == b) .all()'? –

ответ

1

not (a == b) поднимет ValueError потому, что истинное значение массива с несколькими элементами неоднозначно.

Как вы инвертировать булево массив в NumPy есть с оператором ~:

>>> a != b 
array([False, True, False], dtype=bool) 
>>> ~ (a == b) 
array([False, True, False], dtype=bool) 
>>> (~ (a == b)).all() == (a != b).all() 
True 
1

Следующие два выражения равны. Они возвращают true, когда есть хотя бы один другой элемент.

print((a != b).any()) 
print(not (a == b).all()) 

И следующие два также дают тот же результат. Они возвращают true, когда каждый элемент в том же положении отличается в двух массивах.

print((a != b).all()) 
print(not (a == b).any()) 
0

, чтобы понять больше, посмотрите на этот код, вы хотите сравнить д и гр но и массивы, так что вы должны сравнить правильно не только не оператор !!

a = np.array([1,1,1]) 
b = np.array([1,2,1]) 
c = (a!=b) 
type(c) 
Out[6]: numpy.ndarray 
type(a) 
Out[7]: numpy.ndarray 
c 
Out[8]: array([False, True, False], dtype=bool) 
c.all() 
Out[9]: False 
d = (a==b) 
type(d) 
Out[11]: numpy.ndarray 
d 
Out[12]: array([ True, False, True], dtype=bool) 
not d 
--------------------------------------------------------------------------- 
ValueError        Traceback (most recent call last) 
<ipython-input-13-84cd3b926fb6> in <module>() 
----> 1 not d 

ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all() 

not(d.any()) 
Out[15]: False 

x = d.any() 
type(x) 
Out[19]: numpy.bool_ 

 Смежные вопросы

  • Нет связанных вопросов^_^