2016-06-12 8 views
5

Как сравнить более 2 массивов numpy?Сравнение нескольких массивов numpy

import numpy 
a = numpy.zeros((512,512,3),dtype=numpy.uint8) 
b = numpy.zeros((512,512,3),dtype=numpy.uint8) 
c = numpy.zeros((512,512,3),dtype=numpy.uint8) 
if (a==b==c).all(): 
    pass 

это дает ValueError, и я не заинтересован в сравнении массивов двух одновременно.

+2

«и мне не интересно сравнивать массивы по два за раз» - ну, это лучший вариант, который у вас есть. – user2357112

+0

@ user2357112, что было бы непросто, если бы было много массивов –

ответ

4

Для трех массивов вы можете проверить равенство между соответствующими элементами между первым и вторым массивами, а затем вторым и третьим массивами, чтобы дать нам два булевых скаляра и, наконец, увидеть, являются ли оба этих скаляра True для окончательного скалярного вывода, как так -

np.logical_and((a==b).all(), (b==c).all()) 

для большего числа массивов, вы можете складывать их, получить дифференцирование вдоль оси укладки и проверьте все этих дифференцировки равны нулям. Если они есть, мы имеем равенство среди всех входных массивов, иначе нет. Реализация будет выглядеть так -

L = [a,b,c] # List of input arrays 
out = (np.diff(np.vstack(L).reshape(len(L),-1),axis=0)==0).all() 
+0

, в чем нуждаются изменения (len (L), - 1), он работает хорошо даже без этого –

+0

@JayanthReddy Нет, это не так. Эта ось будет содержать первую ось от входных массивов, объединенных с осью укладки. Итак, нам нужно разбить эту ось на две с этой перестройкой. Чтобы прояснить пример, попробуйте с помощью параметра 'a = np.random.randint (0,9, (4,5,3)); b = a.copy(); c = a.copy() '. – Divakar

3

Для три массива, вы должны действительно просто сравнить их два, в то время:

if np.array_equal(a, b) and np.array_equal(b, c): 
    do_whatever() 

Для переменного числа массивов, давайте предположим, что все они объединены в один большой массив arrays. Тогда вы могли бы сделать

if np.all(arrays[:-1] == arrays[1:]): 
    do_whatever() 
+0

@JayanthReddy: Возможно, потому, что вы сделали 'массивы' список или что-то в этом роде. – user2357112

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