Numpy: BUG: فشل اكتشاف البعد عند خلط الحجميات والشكل == (1،) المصفوفات

تم إنشاؤها على ٩ ديسمبر ٢٠١٩  ·  5تعليقات  ·  مصدر: numpy/numpy

np.array([0.25, np.array([0.3])]) سيفشل في إنشاء مصفوفة عائمة ، سيكون النوع dtype هو الكائن.

هذا يبدو لي خطأ ، هل هو متعمد؟

00 - Bug numpy.dtype

ال 5 كومينتر

Ccnschloe ، الذي يعارض هذا النوع من الأشياء ويمكنه الارتباط

شكرا على CCing. نعم ، يبدو هذا حقًا كشيء كنت أقوم به. : smiley_cat: https://github.com/numpy/numpy/issues/10404

أود أن أزعم أن إنشاء مصفوفة كائن هو الشيء الصحيح هنا. بعد كل شيء ، أنت تضع عائمًا ومصفوفة معًا. إذا قمت بإنشاء قائمة Python ،

[0.25, np.array([0.3])]

قد تتوقع نفس الشيء: الإدخال الأول هو عدد عشري ، والثاني عبارة عن مصفوفة بطول 1. سيكون محيرًا إذا تصرفت القوائم و np.arrays بشكل مختلف هنا.

أيضًا ، إنشاء مصفوفة dtype float هنا بشكل ضمني سيجعل من المستحيل إنشاء مصفوفة [float, vector[1]] حتى لو أردت ذلك.

في معظم الأحيان ، يتم تحديد np.array([0.25, np.array([0.3])]) عن طريق الخطأ ، ويمكن إصلاحه بسهولة ؛ انظر ، على سبيل المثال ، https://github.com/scipy/scipy/pull/11147/files#diff -21a6a0b0d89357857304bfba2da5a971L321. بعد كل شيء،

الصريح أفضل من الضمني.

حسنًا ، جارٍ الإغلاق. كان من شأن هذا العلاقات العامة أن يجعل التغييرات الأخيرة لـ NEP 34 (منذ ذلك الحين) أقل إزعاجًا للخيال.

تضمين التغريدة

إن إنشاء مصفوفة عائمة من النوع dtype ضمنيًا سيجعل من المستحيل إنشاء مصفوفة [float، vector [1]] حتى لو أردت ذلك.

للسجل ، يمكنك عمل np.array(0.3, np.array([0.3]), dtype=object) .

إذا قمت بإنشاء قائمة Python ...

تختلف NumPy ndarrays كثيرًا عن قوائم python. أنا لا أتوقع ذلك
سينشئ np.array([0.2, 0.3, 0.4]) مصفوفة كائن ، على الرغم من أنني لم أحدد np.float64 للنوع dtype. لذلك نحن نتفق على أننا مرتاحون لمستوى معين من اكتشاف النوع التلقائي القائم على القيمة. السؤال هو ما الذي يجب أن يحظى بالأولوية: الأنواع الرقمية أم أنواع الكائنات.

لذلك نحن نتفق على أننا مرتاحون لمستوى معين من اكتشاف النوع التلقائي القائم على القيمة.

أعتقد أن "الأتمتة" واضحة تمامًا هنا: احصل دائمًا على نوع البيانات "الأدنى" الذي يمكنه التقاط جميع قيم الإدخال:

numpy.array([1, 2]).dtype   # int64
numpy.array([1, numpy.array(2)]).dtype  # int64, array of rank 0 are basically scalars
numpy.array([1.0, 2]).dtype   # float64
numpy.array([1, [2]]).dtype   # O
هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات