2016-05-17 71 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 

如果這是行不通的,這意味着你的陣列相等。

演示

>>> 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)