2011-05-06 14 views
6

मैं एक संरचित सरणी है की dtype संशोधित करने, उदाहरण के लिए:NumPy: प्रोग्राम के रूप में एक संरचित सरणी

import numpy as np 
orig_type = np.dtype([('Col1', '<u4'), ('Col2', '<i4'), ('Col3', '<f8')]) 
sa = np.empty(4, dtype=orig_type) 

जहां sa की तरह (यादृच्छिक डेटा) दिखता है:

array([(11772880L, 14527168, 1.079593371731406e-307), 
     (14528064L, 21648608, 1.9202565460908188e-302), 
     (21651072L, 21647712, 1.113579933986867e-305), 
     (10374784L, 1918987381, 3.4871913811200906e-304)], 
     dtype=[('Col1', '<u4'), ('Col2', '<i4'), ('Col3', '<f8')]) 

अब, मेरे कार्यक्रम में, मैं किसी भी तरह से निर्णय लेता हूं कि मुझे डेटा प्रकार 'Col2' को स्ट्रिंग में बदलने की आवश्यकता है। मैं कैसे उदाहरण के लिए गैर कार्यक्रम संबंधी तरीका यह है, dtype संशोधित कर सकते हैं:

new_type = np.dtype([('Col1', '<u4'), ('Col2', '|S10'), ('Col3', '<f8')]) 
new_sa = sa.astype(new_type) 

जहां new_sa अब की तरह लग रहा है, जो बहुत अच्छा है:

array([(11772880L, '14527168', 1.079593371731406e-307), 
     (14528064L, '21648608', 1.9202565460908188e-302), 
     (21651072L, '21647712', 1.113579933986867e-305), 
     (10374784L, '1918987381', 3.4871913811200906e-304)], 
     dtype=[('Col1', '<u4'), ('Col2', '|S10'), ('Col3', '<f8')]) 

मैं कैसे प्रोग्राम के रूप में orig_type को new_type संपादित कर सकता ? (लंबाई |S10 के बारे में चिंता न करें)। क्या कोई "आसान" तरीका है, या क्या मुझे एक नया dtype कन्स्ट्रक्टर ऑब्जेक्ट बनाने के लिए फ़ॉर-लूप की आवश्यकता है?

उत्तर

4

अपने प्रश्न वास्तव में कितने साल के एक से नए dtype वस्तु के निर्माण के लिए करना है, तो यह हो सकता है आप के लिए क्या देख रहे:

orig_type = sa.dtype 
descr = orig_type.descr 
descr[1] = (descr[1][0], "|S10") 
new_type = numpy.dtype(descr) 
+0

'.descr' मैं के लिए, धन्यवाद क्या देख रहा था है! –

5

कोई शॉर्टकट नहीं है। हालांकि आप केवल नए डिटेप का निर्माण करेंगे और .astype() का उपयोग करेंगे।

संबंधित मुद्दे