2012-08-14 17 views
7

मैं एक चटाई फ़ाइल है कि मैंपायथन में पहुंचते समय matlab संरचना को कैसे संरक्षित करें?

from scipy import io 
mat = io.loadmat('example.mat') 

matlab से का उपयोग करके पहुँचा है, example.mat मैं data2.LON जितना आसान डेटा का उपयोग कर सकते हैं, तो निम्न struct

>> load example.mat 
    >> data1 

    data1 = 

      LAT: [53x1 double] 
      LON: [53x1 double] 
      TIME: [53x1 double] 
      units: {3x1 cell} 


    >> data2 

    data2 = 

      LAT: [100x1 double] 
      LON: [100x1 double] 
      TIME: [100x1 double] 
      units: {3x1 cell} 

matlab में होता है, आदि .. यह अजगर में तुच्छ नहीं है। यह मुझे कई विकल्प देता है जैसे

mat.clear  mat.get   mat.iteritems mat.keys  mat.setdefault mat.viewitems 
mat.copy  mat.has_key  mat.iterkeys mat.pop   mat.update  mat.viewkeys  
mat.fromkeys mat.items  mat.itervalues mat.popitem  mat.values  mat.viewvalues  

पायथन में एक ही संरचना को संरक्षित करना संभव है? यदि नहीं, तो डेटा का सर्वोत्तम उपयोग कैसे करें? वर्तमान पायथन कोड जिसका मैं उपयोग कर रहा हूं, के साथ काम करना बहुत मुश्किल है।

धन्यवाद

+0

क्या आप इसे समझ सकते हैं कि जब आप इसे पायथन में लोड करते हैं तो यह कैसा दिखता है? –

+0

इसके अलावा, एक और विचार। यदि आप SciPi का उपयोग कर रहे हैं तो आपने 'SciPi.loadmat' का उपयोग करने का प्रयास किया है? –

+0

हाँ, मैंने लोडमैट की कोशिश की। पायथन में उत्पादन का उपयोग करना मुश्किल है। मुझे यह भी नहीं पता कि डेटा 1 या डेटा 2 में एलओएन या एलएटी तक कैसे पहुंचे। – mikeP

उत्तर

6

मिले matlab struct और अजगर के बारे में इस ट्यूटोरियल

http://docs.scipy.org/doc/scipy/reference/tutorial/io.html

+0

यह आपके लिए अतिरिक्त जानकारी की एक परत भी जोड़ सकता है: http://stackoverflow.com/questions/1984714/how-to-access-fields-in-a-struct-imported-from-a-mat -file-का उपयोग कर-loadmat-इन-pyth? RQ = 1 –

0

(!) *.mat फ़ाइलों में सहेजा नेस्टेड संरचनाओं के मामले में, जांच करने के लिए आवश्यक है अगर शब्दकोश में आइटम है कि io.loadmat आउटपुट मैटलैब संरचनाएं हैं। उदाहरण के लिए Matlab में अगर

>> thisStruct 

ans = 
     var1: [1x1 struct] 
     var2: 3.5 

>> thisStruct.var1 

ans = 
     subvar1: [1x100 double] 
     subvar2: [32x233 double] 

तो कोड Mergen द्वारा scipy.io.loadmat nested structures (i.e. dictionaries)

0

में जब मैं MATLAB से अजगर कि structs की एक सरणी में संग्रहीत किया जाता {strut_1, struct_2} मैं एक निकालने में डेटा लोड करने की आवश्यकता का उपयोग उस ऑब्जेक्ट से कुंजी और मानों की सूची जो मैं scipy.io.loadmat के साथ लोड करता हूं। फिर मैं इन्हें अपने चर में इकट्ठा कर सकता हूं, या यदि आवश्यक हो, तो उन्हें एक शब्दकोश में दोबारा दोहराएं। exec कमांड का उपयोग सभी मामलों में उचित नहीं हो सकता है, लेकिन यदि आप डेटा को संसाधित करने की कोशिश कर रहे हैं तो यह अच्छी तरह से काम करता है।

# Load the data into Python  
D= sio.loadmat('data.mat') 

# build a list of keys and values for each entry in the structure 
vals = D['results'][0,0] #<-- set the array you want to access. 
keys = D['results'][0,0].dtype.descr 

# Assemble the keys and values into variables with the same name as that used in MATLAB 
for i in range(len(keys)): 
    key = keys[i][0] 
    val = np.squeeze(vals[key][0][0]) # squeeze is used to covert matlat (1,n) arrays into numpy (1,) arrays. 
    exec(key + '=val') 
संबंधित मुद्दे