Numpy: BUG: Mengatur mask pada tampilan dengan mask = nomask tidak menyebar ke pemiliknya

Dibuat pada 27 Jun 2016  ·  4Komentar  ·  Sumber: numpy/numpy

Inilah masalah yang saya hadapi selama bekerja
Masalah dengan topeng saat tidak disetel

>>> a =np.arange(6,dtype=np.float64).reshape((2,3))
>>> a
array([[ 0.,  1.,  2.],
       [ 3.,  4.,  5.]])
>>> am = np.ma.masked_array(a)
>>> am
masked_array(data =
 [[ 0.  1.  2.]
 [ 3.  4.  5.]],
             mask =
 False,
       fill_value = 1e+20)

>>> am[0][1]=np.ma.masked
>>> am
masked_array(data =
 [[ 0.  1.  2.]
 [ 3.  4.  5.]],
             mask =
 False,
       fill_value = 1e+20)

###--------- doesn't work----------------

>>> am[0,1]=np.ma.masked
>>> am
masked_array(data =
 [[0.0 -- 2.0]
 [3.0 4.0 5.0]],
             mask =
 [[False  True False]
 [False False False]],
       fill_value = 1e+20)

###-------this way it works---------

>>> am[1][1]=np.ma.masked
>>> am
masked_array(data =
 [[0.0 -- 2.0]
 [3.0 -- 5.0]],
             mask =
 [[False  True False]
 [False  True False]],
       fill_value = 1e+20)

###--------now it surprisingly works again--

Linux  3.19.8-100.fc20.x86_64 
Python 2.7.5
>>> np.__version__
'1.8.2'

Saya tahu sistem saya tidak up-to-date tetapi saya bertanya kepada teman yang memilikinya
dan dia menegaskan bahwa masalah itu ada

00 - Bug numpy.ma

Komentar yang paling membantu

Setiap kali saya memikirkan nomask , saya juga memikirkan kutipan Donald Knuth, "Optimasi prematur adalah akar dari semua kejahatan."

Menurut saya, nomask tidak terkecuali. Jumlah kasus tidak biasa yang ditemui seseorang dari perilaku ini cukup besar dan menjadi lebih sulit untuk diperbaiki karenanya.

Jika benar-benar produktif untuk mengetahui apakah topeng itu sepele atau tidak, kita dapat dengan mudah memiliki metode seperti has_mask , yang menyimpan hasilnya.

Apakah ada minat untuk langsung menghapus nomask ?

Semua 4 komentar

Dikonfirmasi di master (1.12). Ini seperti yang diharapkan # 5580 untuk diperbaiki, tetapi seperti yang telah dibahas di sana, kasus khusus ini tidak mungkin diperbaiki tanpa perbaikan MaskedArray untuk menghapus np.nomask .

Inilah masalahnya: MaskedArrays terkadang menyimpan mask sebagai array boolean, dan terkadang (jika tidak ada nilai bertopeng) menyimpan mask hanya sebagai nilai False (dan np.nomask == False).

Masalahnya adalah saat memotong MaskedArray (dan mendapatkan tampilan), mask hanya dapat "dilihat" jika saat ini berupa array boolean, tetapi tidak jika itu adalah konstanta "False". Jadi pertama kali Anda mencoba am[0][1] = ... topeng adalah konstanta "False" dan tidak dapat dilihat, jadi tidak diperbarui. Kali kedua Anda mencoba, topeng disimpan sebagai array boolean sehingga dapat dilihat, dan diperbarui.

Tambahkan ini ke daftar panjang bug yang disebabkan oleh desain nomask , misalnya # 7588.

Setiap kali saya memikirkan nomask , saya juga memikirkan kutipan Donald Knuth, "Optimasi prematur adalah akar dari semua kejahatan."

Menurut saya, nomask tidak terkecuali. Jumlah kasus tidak biasa yang ditemui seseorang dari perilaku ini cukup besar dan menjadi lebih sulit untuk diperbaiki karenanya.

Jika benar-benar produktif untuk mengetahui apakah topeng itu sepele atau tidak, kita dapat dengan mudah memiliki metode seperti has_mask , yang menyimpan hasilnya.

Apakah ada minat untuk langsung menghapus nomask ?

Saya ingin berpadu bahwa saya juga mengalami masalah ini. Mungkin ada gunanya menambahkan catatan dalam dokumentasi tentang itu. Hal berikut menyarankan kepada saya bahwa memodifikasi topeng tampilan akan mengubah topeng aslinya.

Saat mengakses slice, outputnya adalah array bertopeng yang atribut data adalah tampilan dari data asli, dan yang mask-nya adalah nomask (jika tidak ada entri yang tidak valid dalam array asli) atau tampilan potongan yang sesuai dari topeng asli. Tampilan tersebut diperlukan untuk memastikan penyebaran setiap modifikasi mask ke aslinya.

Apakah ada minat untuk segera menghapus nomask?

Mungkin juga masked . Ini mungkin bermuara pada membuat beberapa perubahan besar pada array bertopeng, atau menerapkan kelas baru sama sekali. Mungkin layak untuk menyusun NEP. Saya jarang menggunakan array bertopeng, jadi ini adalah sesuatu yang paling baik dilakukan oleh orang-orang yang membutuhkan fungsionalitas tersebut.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat