Numpy: BUG: وضع القناع على طريقة عرض باستخدام القناع = لا ينتشر Nomask إلى المالك

تم إنشاؤها على ٢٧ يونيو ٢٠١٦  ·  4تعليقات  ·  مصدر: numpy/numpy

هذه هي المشكلة التي واجهتها أثناء عملي
المشكلة مع القناع عندما لم يتم تعيينه

>>> 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'

أعلم أن نظامي غير محدث ولكني سألت صديقًا لديه
ويؤكد أن هذه المشكلة موجودة

00 - Bug numpy.ma

التعليق الأكثر فائدة

في كل مرة أفكر فيها في nomask ، أفكر أيضًا في اقتباس دونالد كنوث ، "التحسين المبكر هو أصل كل الشرور".

يبدو لي أن nomask ليس استثناءً. عدد الحالات غير العادية التي يواجهها المرء من هذا السلوك كبير جدًا ويصعب إصلاحها بسببه.

إذا كان من المفيد حقًا معرفة ما إذا كان القناع تافهًا أم لا ، فيمكننا بسهولة الحصول على طريقة مثل has_mask ، والتي تخزن نتيجتها مؤقتًا.

هل هناك أي مصلحة في التحرك نحو إزالة nomask تمامًا؟

ال 4 كومينتر

مؤكد في الماجستير (1.12). هذا يشبه ما كان يأمل # 5580 في إصلاحه ، ولكن كما تمت مناقشته هناك ، لا يمكن إصلاح هذه الحالة الخاصة بدون إجراء إصلاح شامل لـ MaskedArray لإزالة np.nomask .

إليك المشكلة: تقوم MaskedArrays أحيانًا بتخزين القناع كمصفوفة من القيم المنطقية ، وأحيانًا (إذا لم تكن هناك قيم مقنعة) قم بتخزين القناع ببساطة على هيئة القيمة False (و np.nomask == False).

تكمن المشكلة في أنه عند تقطيع MaskedArray (والحصول على عرض) ، لا يمكن "عرض" القناع إلا إذا كان حاليًا عبارة عن مجموعة من القيم المنطقية ، ولكن ليس إذا كان هو الثابت "False". لذا في المرة الأولى التي تحاول فيها استخدام am[0][1] = ... يكون القناع هو القيمة الثابتة "False" ولا يمكن عرضه ، لذلك لا يتم تحديثه. في المرة الثانية التي تحاول فيها ، يتم تخزين القناع كمصفوفة من القيم المنطقية بحيث يمكن عرضها ، وبالتالي يتم تحديثها.

أضف هذا إلى القائمة الطويلة للأخطاء الناتجة عن هذا التصميم nomask ، على سبيل المثال # 7588.

في كل مرة أفكر فيها في nomask ، أفكر أيضًا في اقتباس دونالد كنوث ، "التحسين المبكر هو أصل كل الشرور".

يبدو لي أن nomask ليس استثناءً. عدد الحالات غير العادية التي يواجهها المرء من هذا السلوك كبير جدًا ويصعب إصلاحها بسببه.

إذا كان من المفيد حقًا معرفة ما إذا كان القناع تافهًا أم لا ، فيمكننا بسهولة الحصول على طريقة مثل has_mask ، والتي تخزن نتيجتها مؤقتًا.

هل هناك أي مصلحة في التحرك نحو إزالة nomask تمامًا؟

أود أن أتحدث مع أنني واجهت هذه المشكلة أيضًا. قد يكون من المفيد إضافة ملاحظة في الوثائق حول هذا الموضوع. يقترح ما يلي لي أن تعديل قناع العرض سيؤدي إلى تعديل قناع الأصل.

عند الوصول إلى شريحة ، يكون الناتج عبارة عن مصفوفة مقنعة تكون السمة data سمة عرض البيانات الأصلية ، وقناعها إما nomask (إذا لم تكن هناك إدخالات غير صالحة في المصفوفة الأصلية) أو عرض للشريحة المقابلة للقناع الأصلي. العرض مطلوب لضمان نشر أي تعديل للقناع على الأصل.

هل هناك أي مصلحة في التحرك نحو إزالة الاسم المستعار تمامًا؟

ربما أيضًا masked . ربما يرجع ذلك إلى إجراء بعض التغييرات الكبيرة على المصفوفات المقنعة ، أو تنفيذ فئة جديدة تمامًا. قد يكون من المفيد تجميع NEP. نادرًا ما أستخدم المصفوفات المقنعة ، لذا فإن هذا أفضل ما يقوم به الأشخاص الذين يحتاجون إلى الوظيفة.

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات