2016-05-17 2 views
1

У меня есть список массивов numpy, и вы хотите проверить, равны ли все массивы. Каков самый быстрый способ сделать это?Проверьте, равен ли список массивов numpy

Мне известно о функции numpy.array_equal (https://docs.scipy.org/doc/numpy-1.10.0/reference/generated/numpy.array_equal.html), однако, насколько я знаю, это относится только к двум массивам, и я хочу проверить N массивов друг на друга.

Я также нашел этот ответ, чтобы проверить все элементы в списке: check if all elements in a list are identical. Однако, когда я пытаюсь использовать каждый метод в принятом ответе, я получаю исключение (ValueError: значение истинности массива с более чем одним элементом неоднозначно). Используйте a.any() или a.all())

Спасибо,

+1

ли ваши массивы целое или плавать? Есть много вопросов об этом 'ValueError'. Посмотрите на некоторые из них. – hpaulj

ответ

2

Вы могли бы просто adapt a general iterator method для сравнения массива

def all_equal(iterator): 
    try: 
    iterator = iter(iterator) 
    first = next(iterator) 
    return all(np.array_equal(first, rest) for rest in iterator) 
    except StopIteration: 
    return True 

Если это не работает, это означает, что ваши массивы не равны.

Demo:

>>> i = [np.array([1,2,3]),np.array([1,2,3]),np.array([1,2,3])] 
>>> print(all_equal(i)) 
True 
>>> j = [np.array([1,2,4]),np.array([1,2,3]),np.array([1,2,3])] 
>>> print(all_equal(j)) 
False 
0

Если массивы имеют одинаковый размер, это решение с использованием numpy_indexed (отказ от ответственности: Я ее автор) должен работать и быть очень эффективным:

import numpy_indexed as npi 
npi.all_unique(list_of_arrays) 
Смежные вопросы