विवरण np.array
संकलित कोड में विभिन्न इनपुट को दफन किया गया है। ऑब्जेक्ट डाइट ऐरे बनाने के बारे में कई प्रश्न दिखाते हैं, यह जटिल और भ्रमित हो सकता है। मूल मॉडल एक नेस्टेड सूची से बहुआयामी संख्यात्मक सरणी बनाना है।
np.array([[1,2,3],[4,5,6]])
संरचित सरणियों को लागू करने, डेवलपर्स सिर्फ एक और नेस्टेड आयाम से एक रिकार्ड भेद के तरीके के रूप tuple
अपनाया। यह एक संरचित सरणी के प्रदर्शन में स्पष्ट है।
संरचित सरणी को परिभाषित करते समय भी एक आवश्यकता है, हालांकि list of tuples
आवश्यकता दस्तावेज में कुछ हद तक दफन की गई है।
In [382]: dt=np.dtype([('y',int)])
In [383]: np.array(alist,dt)
TypeError: a bytes-like object is required, not 'int'
यह मेरा संस्करण '1.12.0' त्रुटि संदेश है। यह आपके में अलग दिखता है।
जैसा कि आप ध्यान देते हैं कि एक सूची समझ घोंसला सूची को टुपल्स की सूची में परिवर्तित कर सकती है।
In [384]: np.array([tuple(i) for i in alist],dt)
Out[384]:
array([(1,), (2,), (3,)],
dtype=[('y', '<i4')])
SO प्रश्नों का उत्तर देने में यह दृष्टिकोण है जिसका मैं अक्सर उपयोग करता हूं। या तो उस या पुनरावर्तित सरणी के फ़ील्ड सेट करें (आमतौर पर फ़ील्ड की तुलना में बहुत अधिक रिकॉर्ड होते हैं, ताकि लूप महंगा न हो)।
यह एक संरचित सरणी कॉल में सरणी लपेटकर की तरह दिखता है एक astype
कॉल के बराबर है:
In [385]: np.array(np.array(alist),dt)
Out[385]:
array([[(1,)],
[(2,)],
[(3,)]],
dtype=[('y', '<i4')])
In [386]: np.array(alist).astype(dt)
Out[386]:
array([[(1,)],
[(2,)],
[(3,)]],
dtype=[('y', '<i4')])
लेकिन आयाम की संख्या में परिवर्तन पर ध्यान दें। Tuples की सूची एक (3,) सरणी बनाई। astype
ने (3,1)
संख्यात्मक सरणी को एक (3,1) संरचित सरणी में परिवर्तित किया।
टुपल्स np.array
बताते हैं कि भाग सरणी आयामों और अभिलेखों के बीच विभाजन को यहां रखा गया है।यह व्याख्या
[(3,), (1,), (2,)]
[record, record, record]
जहां [[1],[2],[3]]
के स्वचालित अनुवाद
[[record],[record],[record]]
उत्पादन हो सकता है जब dtype सांख्यिक (गैर संरचित) यह सूची और टपल
In [388]: np.array([tuple(i) for i in alist],int)
Out[388]:
array([[1],
[2],
[3]])
लेकिन बीच के अंतर पर ध्यान नहीं देता है के रूप में जब टाइप प्रकार कंपाउंड होता है, डेवलपर्स ने ट्यूपल लेयर को महत्वपूर्ण जानकारी के रूप में उपयोग करना चुना है।
एक अधिक जटिल संरचना वाले dtype
In [389]: dt1=np.dtype([('y',int,(2,))])
In [390]: np.ones((3,), dt1)
Out[390]:
array([([1, 1],), ([1, 1],), ([1, 1],)],
dtype=[('y', '<i4', (2,))])
In [391]: np.array([([1,2],),([3,4],)])
Out[391]:
array([[[1, 2]],
[[3, 4]]])
In [392]: np.array([([1,2],),([3,4],)], dtype=dt1)
Out[392]:
array([([1, 2],), ([3, 4],)],
dtype=[('y', '<i4', (2,))])
प्रदर्शन (और इनपुट) सूची के भीतर tuples भीतर सूचियों है पर विचार करें। और यह बस एक शुरुआत है
In [393]: dt1=np.dtype([('x',dt,(2,))])
In [394]: dt1
Out[394]: dtype([('x', [('y', '<i4')], (2,))])
In [395]: np.ones((2,),dt1)
Out[395]:
array([([(1,), (1,)],), ([(1,), (1,)],)],
dtype=[('x', [('y', '<i4')], (2,))])
convert list of tuples to structured numpy array
क्योंकि पंक्तियाँ, tuples का उपयोग कर को सौंपा जा सकता है क्योंकि एक संरचित सरणी के प्रत्येक तत्व एक * struct * है, इसलिए वहाँ यौगिक डेटाप्रकार किसी तरह का है। विकल्प एक बफर का उपयोग करना है (यही कारण है कि 'np.array' काम करता है)। –
यह दस्तावेज की तरह है [यहां] (https://docs.scipy.org/doc/numpy/user/basics.rec.html#filling- संरचित-arrays) –
और पिछले दस्तावेज़ अनुच्छेद में उल्लेख किया गया है कि एक्स है tuples की एक सूची के साथ बनाया गया। '। यह इनपुट शैली प्रदर्शन शैली से मेल खाती है। मैं आपकी सूची समझ दृष्टिकोण पसंद करता हूं। या क्षेत्र द्वारा एक preallocated सरणी फ़ील्ड भरना। – hpaulj