Numpy: مشكلة تتعلق بسلسلة المصفوفات المهيكلة (خطأ في التجزئة) (Trac # 2084)

تم إنشاؤها على ٢٠ أكتوبر ٢٠١٢  ·  7تعليقات  ·  مصدر: numpy/numpy

_التذكرة الأصلية http://projects.scipy.org/numpy/ticket/2084 في 2012-03-19 بواسطة astrofrog ، مخصصة لـ unknown._

يوضح ما يلي المشكلة - على الرغم من أن Numpy يعرف كيفية ربط حقول المصفوفة المهيكلة ، إلا أنه يتعطل إذا حاول المرء أن يسلسل المصفوفات المنظمة نفسها:

In [1]: import numpy as np

In [2]: d1 = np.array(zip(['a','b','c']), dtype=[('b', '|S1')])

In [3]: d2 = np.array(zip(['aa','bb','cc']), dtype=[('b', '|S2')])

In [4]: np.hstack([d1['b'],d2['b']])
Out[4]: 
array(['a', 'b', 'c', 'aa', 'bb', 'cc'], 
      dtype='|S2')

In [5]: np.hstack([d1, d2])
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
/Users/tom/<ipython-input-5-bd5cc420043d> in <module>()
----> 1 np.hstack([d1, d2])

/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/numpy/core/shape_base.pyc in hstack(tup)
    268 
    269     """
--> 270     return _nx.concatenate(map(atleast_1d,tup),1)
    271 

TypeError: invalid type promotion

تحدث مشكلة مماثلة مع قيم الفاصلة العائمة ذات النهاية المختلفة:

In [1]: import numpy as np

In [2]: d1 = np.array(zip([1,2,3]), dtype=[('a', '<f4')])

In [3]: d2 = np.array(zip([1,2,3]), dtype=[('a', '>f4')])

In [4]: np.hstack([d1['a'],d2['a']])
Out[4]: array([ 1.,  2.,  3.,  1.,  2.,  3.], dtype=float32)

In [5]: np.hstack([d1, d2])
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
/Users/tom/<ipython-input-5-bd5cc420043d> in <module>()
----> 1 np.hstack([d1, d2])

/Users/tom/Library/Python/2.7/lib/python/site-packages/numpy/core/shape_base.pyc in hstack(tup)
    271     # As a special case, dimension 0 of 1-dimensional arrays is "horizontal"
    272     if arrs[0].ndim == 1:
--> 273         return _nx.concatenate(arrs, 0)
    274     else:
    275         return _nx.concatenate(arrs, 1)

TypeError: invalid type promotion

في بعض الحالات ، يمكن أن يتسبب ذلك في حدوث أخطاء في التجزئة ، على الرغم من أنني لم أجد طريقة لإعادة إنتاج هذا باستمرار.

00 - Bug numpy.core

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

charris : هل من فرصة

ال 7 كومينتر

_trac المستخدم lcampagn كتب في 2012-09-24_

يمكنني تأكيد هذا الخطأ وإعادة إنتاج خطأ التجزئة:

>>> import numpy as np
>>> a = np.empty(1, dtype=[('x', object)])
>>> b = np.empty(1, dtype=[('x', float)])
>>> np.concatenate([a,b])
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: invalid type promotion
>>> np.concatenate([a,b])
Segmentation fault (core dumped)

لقد واجهت هذا الانهيار في عدة حالات مختلفة.
يمكنني التسبب في هذا الانهيار في كل من Linux (1.6.1-6ubuntu1) و Windows.
لم أتمكن من إنشاء تتبعات مكدس مفيدة - يبدو أن هذا الخطأ يتسبب في بعض تلف المكدس.

تم تغيير العنوان من Issue with concatenating structured arrays إلى Issue with concatenating structured arrays (segmentation fault) بواسطة trac user lcampagn في 2012-09-24

أعتقد أن هذا له علاقة بـ TODO عند numpy/core/src/multiarray/convert_datatype.c:1122 :

/* TODO: Also combine fields, subarrays, strings, etc */

على الأقل هذا هو الفشل النهائي في هذه القضية.

لم أتمكن من إعادة إنتاج segfault.

لقد بحثت أيضًا في هذا بما يكفي لإدراك أن القضية النهائية هنا هي مطالبة NumPy بدمج المصفوفات المنظمة التعسفية أكثر تعقيدًا من مطالبتهم بدمج السلاسل. تقدم هذه المشكلة حالة يكون فيها الجمع واضحًا للعين ، ولكن ليس من الواضح كيف يجب على NumPy دمج المصفوفات المنظمة التعسفية (افترض أنه يجب دمج الحقول التي تحمل الاسم نفسه؟ خذ اتحاد ما تبقى؟).

نظرًا لأنني جديد في هذا المشروع ، سأترك هذا مفتوحًا في الوقت الحالي ، وسأحاول العثور على مكان آخر لتوجيه جهودي :-P.

حسنا ، لا ينبغي أن segfault. يجب أن نرفع خطأ حتى يتم اكتشاف شيء ما.

نعم - إنها تثير خطأ الآن. لم أستطع الوصول إلى segfault.

charris : هل من فرصة

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