2 つの NumPy 配列の等価性を比較する最も簡単な方法は何A[i] == B[i]
ですか?
単純に使用==
すると、ブール配列が得られます。
>>> numpy.array([1,1,1]) == numpy.array([1,1,1])
array([ True, True, True], dtype=bool)
and
配列が等しいかどうかを判断するために、この配列の要素を使用する必要がありますか、または比較する簡単な方法はありますか?
2 つの NumPy 配列の等価性を比較する最も簡単な方法は何A[i] == B[i]
ですか?
単純に使用==
すると、ブール配列が得られます。
>>> numpy.array([1,1,1]) == numpy.array([1,1,1])
array([ True, True, True], dtype=bool)
and
配列が等しいかどうかを判断するために、この配列の要素を使用する必要がありますか、または比較する簡単な方法はありますか?
(A==B).all()
配列(A == B)のすべての値がTrueであるかどうかをテストします。
注:AとBの形状もテストしたい場合があります。A.shape == B.shape
特別な場合と代替案(dbauppの回答とyoavramのコメントから)
注意すべきこと:
A
またはB
が空で、もう一方が単一の要素を含む場合、それはを返しTrue
ます。何らかの理由で、比較A==B
によって空の配列が返され、all
演算子はその配列を返しますTrue
。A
。B
結論として、疑問がA
あり、B
形を整えている場合、または単に安全になりたい場合は、次のいずれかの特殊な機能を使用してください。
np.array_equal(A,B) # test if same shape, same elements values
np.array_equiv(A,B) # test if broadcastable shape, same elements values
np.allclose(A,B,...) # test if same shape, elements have close enough values
次のコードを使用してパフォーマンスを測定してみましょう。
import numpy as np
import time
exec_time0 = []
exec_time1 = []
exec_time2 = []
sizeOfArray = 5000
numOfIterations = 200
for i in xrange(numOfIterations):
A = np.random.randint(0,255,(sizeOfArray,sizeOfArray))
B = np.random.randint(0,255,(sizeOfArray,sizeOfArray))
a = time.clock()
res = (A==B).all()
b = time.clock()
exec_time0.append( b - a )
a = time.clock()
res = np.array_equal(A,B)
b = time.clock()
exec_time1.append( b - a )
a = time.clock()
res = np.array_equiv(A,B)
b = time.clock()
exec_time2.append( b - a )
print 'Method: (A==B).all(), ', np.mean(exec_time0)
print 'Method: np.array_equal(A,B),', np.mean(exec_time1)
print 'Method: np.array_equiv(A,B),', np.mean(exec_time2)
出力
Method: (A==B).all(), 0.03031857
Method: np.array_equal(A,B), 0.030025185
Method: np.array_equiv(A,B), 0.030141515
上記の結果によると、numpy メソッドは==演算子とall()メソッドの組み合わせよりも高速であるように思われ、numpy メソッドを比較すると、最も高速なのは numpy.array_equalメソッドのようです。