[python] 比較兩個numpy數組是否相等,即元素明智



Answers

(A==B).all()解決方案非常整潔,但有一些內置函數用於此任務。 即array_equalallclosearray_equiv

(儘管使用timeit一些快速測試似乎表明(A==B).all()方法是最快的,這有點奇怪,因為它必須分配一個全新的數組。)

Question

什麼是最簡單的方法來比較兩個numpy數組的相等性(其中相等性定義為:A = B iff對於所有指數i: A[i] == B[i] )?

簡單地使用==給了我一個布爾數組:

 >>> numpy.array([1,1,1]) == numpy.array([1,1,1])

array([ True,  True,  True], dtype=bool)

我必須and這個數組的元素來確定數組是否相等,還是有比較簡單的方法?




如果你想檢查兩個數組是否具有相同的shapeelements你應該使用np.array_equal因為它是文檔中推薦的方法。

在性能方面,不要指望任何平等檢查會打敗另一個,因為沒有太多空間來優化comparing two elements 。 為了這個緣故,我仍然做了一些測試。

import numpy as np
import timeit

A = np.zeros((300, 300, 3))
B = np.zeros((300, 300, 3))
C = np.ones((300, 300, 3))

timeit.timeit(stmt='(A==B).all()', setup='from __main__ import A, B', number=10**5)
timeit.timeit(stmt='np.array_equal(A, B)', setup='from __main__ import A, B, np', number=10**5)
timeit.timeit(stmt='np.array_equiv(A, B)', setup='from __main__ import A, B, np', number=10**5)
> 51.5094
> 52.555
> 52.761

所以幾乎相同,不需要談論速度。

(A==B).all()行為與下面的代碼片段非常相似:

x = [1,2,3]
y = [1,2,3]
print all([x[i]==y[i] for i in range(len(x))])
> True





Links