Masalahnya

Jadi saya memiliki array yang saya impor berisi nilai mulai dari ~0,0 hingga ~0,76. Ketika saya mulai mencoba menemukan nilai min & max menggunakan Numpy, saya mengalami beberapa inkonsistensi aneh yang saya ingin tahu bagaimana menyelesaikannya jika itu salah saya, atau hindari jika itu adalah kesalahan pemrograman di pihak pengembang Numpy.

Kode

Mari kita mulai dengan mencari lokasi nilai maksimum menggunakan np.max & np.where.

print array.shape
print np.max(array)
print np.where(array == 0.763728955743)
print np.where(array == np.max(array))
print array[35,57]

Outputnya adalah ini:

(74, 145)
0.763728955743
(array([], dtype=int64), array([], dtype=int64))
(array([35]), array([57]))
0.763728955743

Ketika saya mencari di mana array persis sama dengan nilai entri maksimum, Numpy tidak menemukannya. Namun, ketika saya hanya mencari lokasi nilai maksimum tanpa menentukan nilai itu, itu berfungsi. Perhatikan ini tidak terjadi di np.min.

Sekarang saya memiliki masalah yang berbeda tentang minima.

print array.shape
print np.min(array)
print np.where(array == 0.0)
print np.where(array == np.min(array))
print array[10,25], array[31,131]

Lihatlah pengembaliannya.

(74, 145)
0.0
(array([10, 25]), array([ 31, 131]))
(array([10, 25]), array([ 31, 131]))
0.0769331747301 1.54220192172e-09

1,54^-9 cukup dekat dengan 0,0 sehingga sepertinya itu akan menjadi nilai minimum. Tetapi mengapa lokasi dengan nilai 0,077 juga dicantumkan oleh np.where? Itu bahkan tidak mendekati 0,0 dibandingkan dengan nilai lainnya.

Pertanyaan

Mengapa np.where tampaknya tidak berfungsi saat memasukkan nilai maksimum larik, tetapi justru bekerja saat mencari np.max(array)? Dan mengapa np.where() dicampur dengan np.min() mengembalikan dua lokasi, salah satunya jelas bukan nilai minimum?

1
ChristineB 8 Desember 2016, 20:49

1 menjawab

Coba gunakan numpy.isclose() daripada ==. Karena bilangan floating point tidak dapat diuji untuk persamaan yang tepat.

Yaitu ubah ini: np.where(array == 0.763728955743) ke: np.isclose(array, 0.763728955743)

np.min() dan np.max() berfungsi seperti yang diharapkan untuk saya. Perhatikan juga Anda dapat memberikan sumbu seperti arr.min(axis=1) jika Anda mau.

Jika ini tidak menyelesaikannya, mungkin Anda dapat memposting beberapa data csv di suatu tempat untuk mencoba mereproduksi masalah? Saya agak sangat meragukan itu adalah bug dengan numpy itu sendiri tetapi Anda tidak pernah tahu!

0
Alex G Rice 8 Desember 2016, 18:13