Numpy: np.copy (صفيف مقنع) له سلوك غير متوقع

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

.... حيث تعني "غير متوقع" _I_ لم أتوقع ذلك. قد يكون هذا مجرد إصلاح للوثائق ، أو ربما يتم توبيخي لعدم إدراك كيفية عمل np.ma ، لكنني لا أعتقد أن هذا السلوك مناسب:

In [100]: x = np.ma.ones(5)

In [101]: x.mask = [False,False,True,False,False]

In [102]: np.copy(x)
Out[102]: array([ 1.,  1.,  1.,  1.,  1.])

In [103]: np.ma.copy(x)
Out[103]:
masked_array(data = [1.0 1.0 -- 1.0 1.0],
             mask = [False False  True False False],
       fill_value = 1e+20)

In [104]: np.__version__
Out[104]: '1.8.0.dev-074a40c'

أتوقع تحذيرًا على الأقل ، لكنني أفضل أن أرى ، حسب ترتيب التفضيل:

  • إرجاع np.copy(x) مصفوفة مقنعة (بما أن x مصفوفة مقنعة)
  • يحذر np.copy(x) أنه يقوم بكشف القناع عن المصفوفة ، ثم يقوم بإرجاع نفس المصفوفة المذكورة أعلاه
  • يثير np.copy(x) استثناءً
  • إرجاع np.copy(x) [1,1,nan,1,1] (ربما لا يكون هذا مثاليًا)
00 - Bug numpy.lib

ال 11 كومينتر

لا يزال مفتوحًا في 1.9-devel

لست متأكدًا من كيفية إصلاح ذلك بدون غلاف خاص مصفوفات مقنعة.

هل سيؤدي تغيير منطق np.copy إلى تضمين subok=True في استدعاء المصفوفة إلى إصلاح هذه المشكلة؟
من عند:

return array(a, order=order, copy=True)

إلى:

return array(a, order=order, subok=True, copy=True)

إذا كان الأمر كذلك ، فهل يجب أن يكون subok معاملًا لـ np.copy وماذا يجب أن يكون الافتراضي ، صحيح أم خطأ؟ سيعيد True النتيجة المفضلة الأولى ، وسيحافظ False على السلوك الحالي ، لكنه يسمح بالسلوك المتوقع مع إضافة وسيطة.

لا أؤيد إضافة معلمة subok إلى np.copy عندما يكون لدينا بالفعل حلين قابلين للتطبيق تمامًا:

  • استخدم طريقة .copy()
  • استخدم np.array(a, subok=True) (يتم نسخه افتراضيًا)

سأجادل في الواقع عكس ذلك ، لأنني أعتقد أن معظم "النسخ" تعطي الانطباع بأن المرء سيحصل على شيء ما هو ، في الواقع ، نسخة ، وبالتالي من نفس النوع. أرى أيضًا أنها مساهمة صغيرة ولكنها مفيدة لجعل كل من numpy أكثر قدرة على التعامل مع الفئات الفرعية (تمامًا كما فعلت سابقًا مع np.broadcast_arrays ، حيث لم يكن هناك بديل جيد). ومع ذلك ، نظرًا للحاجة إلى أن تظل متوافقًا مع الإصدارات السابقة ، أعتقد أننا عالقون في وضع افتراضي subok=False .

على أي حال ، jjhelmus ، لماذا لا تجري

shoyer : من المحتمل أن يتم إدراج np.copy في قائمة الوظائف التي تحتاجها
نوع من دعم مصفوفة البط ، على الرغم من - لصفيف البط أعتقد أن np.copy
و np.array ربما يفعلان أشياء مختلفة. ربما يجب أن تتصل فقط
arr.copy؟

يوم الخميس ، 15 تشرين الأول (أكتوبر) 2015 الساعة 7:00 صباحًا ، Marten van Kerkwijk <
[email protected]> كتب:

أود أن أجادل في الواقع عكس ذلك ، لأنني أعتقد أن معظم "نسخة" يعطي
الانطباع بأن المرء سيحصل على شيء ما هو في الواقع نسخة ،
وبالتالي من نفس النوع. كما أراها مساهمة صغيرة ولكنها مفيدة
لجعل numpy بأكمله أكثر قدرة على التعامل مع الفئات الفرعية باستمرار
(تمامًا كما فعلت سابقًا مع np.broadcast_arrays ، حيث لا يوجد بديل جيد
كان متاحًا). ومع ذلك ، نظرًا للحاجة إلى البقاء متوافقًا مع الإصدارات السابقة ، فأنا
هل تعتقد أننا عالقون مع الافتراضي subok = False.

على أي حال ، jjhelmus https://github.com/jjhelmus ، لماذا لا تقوم بإجراء علاقات عامة سريعة
ونرى ما يعتقده الآخرون؟

-
قم بالرد على هذا البريد الإلكتروني مباشرةً أو قم بعرضه على GitHub
https://github.com/numpy/numpy/issues/3474#issuecomment -148395201.

ناثانيال ج.سميث - http://vorpus.org

نعم ، سأقوم بإجراء +1 عند إجراء np.copy لمحاولة استدعاء طريقة النسخ على مصفوفات البط.

لا يوجد سبب لعدم دعم subok أيضًا. وبالطبع يمكن فقط استدعاء __copy__ إذا كان موجودًا.

تم إنشاء PR # 6509 والذي يضيف معلمة subok إلى الوظيفة بقيمة افتراضية False . أعتقد أن هذا سيفتح بعض النقاش حول هذا الموضوع. لست متأكدًا مما إذا كان هذا يحدث عادةً في العلاقات العامة أو المشكلة أو القائمة البريدية.

يجب أن تكون مناقشة Api على القائمة البريدية.
في 18 تشرين الأول (أكتوبر) 2015 ، الساعة 7:37 مساءً ، "Jonathan J. Helmus" [email protected]
كتب:

تم إنشاء PR # 6509 https://github.com/numpy/numpy/pull/6509 الذي يضيف
_subok_ إلى الوظيفة ذات القيمة الافتراضية _False_. انا
سوف يؤدي التخمين إلى فتح بعض النقاش حول هذا الموضوع. لست متأكدا إذا كان هذا
عادةً ما يحدث في PR أو المشكلة أو القائمة البريدية.

-
قم بالرد على هذا البريد الإلكتروني مباشرةً أو قم بعرضه على GitHub
https://github.com/numpy/numpy/issues/3474#issuecomment -149080511.

سأرسل بريدًا إلكترونيًا إلى القائمة المتعلقة بالموضوع غدًا.

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