Apa cara paling sederhana untuk membandingkan dua array NumPy untuk kesetaraan (di mana kesetaraan didefinisikan sebagai: A = B iff untuk semua indeks i:) A[i] == B[i]
?
Cukup menggunakan ==
memberi saya array boolean:
>>> numpy.array([1,1,1]) == numpy.array([1,1,1])
array([ True, True, True], dtype=bool)
Apakah saya harus and
elemen array ini untuk menentukan apakah array sama, atau apakah ada cara yang lebih sederhana untuk membandingkan?
python
arrays
numpy
elementwise-operations
clstaudt
sumber
sumber
np.array_equal
IME.(A==B).all()
akan macet jika A dan B memiliki panjang yang berbeda . Pada numpy 1,10, == memunculkan peringatan penghentian dalam kasus ini .nan!=nan
menyiratkan ituarray(nan)!=array(nan)
.import numpy as np
H = 1/np.sqrt(2)*np.array([[1, 1], [1, -1]]) #hadamard matrix
np.array_equal(H.dot(H.T.conj()), np.eye(len(H))) # checking if H is an unitary matrix or not
H adalah matriks kesatuan, jadi H xH.T.conj
adalah matriks identitas. Tetapinp.array_equal
mengembalikan FalseThe
(A==B).all()
solusi adalah sangat rapi, tetapi ada beberapa fungsi built-in untuk tugas ini. Yaituarray_equal
,allclose
danarray_equiv
.(Meskipun, beberapa pengujian cepat dengan
timeit
tampaknya menunjukkan bahwa(A==B).all()
metode ini adalah yang tercepat, yang agak aneh, mengingat harus mengalokasikan array yang sama sekali baru.)sumber
(A==B).all()
. Misalnya, coba(np.array([1])==np.array([])).all()
True
np.array_equal(np.array([1]), np.array([]))
False
(a==b).all()
masih lebih cepat daripadanp.array_equal(a, b)
(yang bisa saja memeriksa satu elemen dan keluar).np.array_equal
juga bekerja denganlists of arrays
dandicts of arrays
. Ini mungkin menjadi alasan untuk kinerja yang lebih lambat.allclose
, itulah yang saya butuhkan untuk perhitungan numerik . Ini membandingkan kesetaraan vektor dalam toleransi . :)np.array_equiv([1,1,1], 1) is True
. Ini karena: Bentuk yang konsisten berarti bentuknya sama, atau satu array input dapat disiarkan untuk membuat bentuk yang sama dengan yang lainnya.Mari kita mengukur kinerja dengan menggunakan potongan kode berikut.
Keluaran
Menurut hasil di atas, metode numpy tampaknya lebih cepat daripada kombinasi dari operator == dan metode all () dan dengan membandingkan metode numpy , yang tercepat tampaknya adalah metode numpy.array_equal .
sumber
Jika Anda ingin memeriksa apakah dua array memiliki
shape
AND yang sama,elements
Anda harus menggunakannyanp.array_equal
karena metode ini direkomendasikan dalam dokumentasi.Jadi hampir sama, tidak perlu berbicara tentang kecepatan.
The
(A==B).all()
berperilaku cukup banyak seperti potongan kode berikut:sumber
Biasanya dua array akan memiliki beberapa kesalahan numerik kecil,
Anda bisa menggunakan
numpy.allclose(A,B)
, alih-alih(A==B).all()
. Ini mengembalikan bool Benar / Salahsumber
Sekarang gunakan
np.array_equal
. Dari dokumentasi:sumber