2013-02-07 18 views
8

में Matlab मैट्रिक्स पढ़ें जब मैं अजगर में एक Matlab मैट्रिक्स को पढ़ने के लिए कोशिश कर रहा हूँ, मैं निम्नलिखित त्रुटि मिलती हैअजगर

>>> scipy.io.loadmat("Dynamical.mat") 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "/usr/lib/python2.7/dist-packages/scipy/io/matlab/mio.py", line 151, in loadmat 
    MR = mat_reader_factory(file_name, appendmat, **kwargs) 
    File "/usr/lib/python2.7/dist-packages/scipy/io/matlab/mio.py", line 105, in mat_reader_factory 
    mjv, mnv = get_matfile_version(byte_stream) 
    File "/usr/lib/python2.7/dist-packages/scipy/io/matlab/miobase.py", line 221, in get_matfile_version 
    % ret) 
ValueError: Unknown mat file type, version 46, 48 

Dynamical.mat मैट्रिक्स

% Size = 30 30 
% Nonzeros = 252 
zzz = zeros(252,3); 
zzz = [ 
1 1 1.4019896354966477e+01 
1 2 0.0000000000000000e+00 
1 3 0.0000000000000000e+00 
... 
+0

मैटलैब का कौन सा संस्करण यह '* .mat' है? – tacaswell

+1

यह एक Petsc पैकेज से आउटपुट है और Matlab – Hesam

+0

द्वारा उत्पन्न नहीं किया गया है क्या आप "वास्तविक" Matlab फ़ाइलों को पढ़ सकते हैं? क्या मैटलैब आपकी फाइल पढ़ सकता है? मैटलैब की आवाज़ जैसे प्रारूपों के साथ कुछ तीसरे पक्ष के पैकेज का उपयोग करना जैसे परेशानी मांगना ... – Floris

उत्तर

2

वाली फ़ाइल है यह प्रश्न थोड़ी देर के लिए निष्क्रिय प्रतीत होता है, लेकिन यदि आपको अभी भी यह .mat फ़ाइल पढ़ने की आवश्यकता है, तो यह एक विकल्प देने के लिए अच्छा है, मान लीजिए कि यह हमेशा आपके द्वारा निर्दिष्ट प्रारूप में है:

def read_mat(file_path): 
    import numpy as np 
    mat = open(file_path, 'r') 
    mat.next() # % Size = 30 30 
    length = int(mat.next().split()[-1]) 
    mat.next() # zzz = zeros(18,3) 
    mat.next() # zzz = [ 
    ans = np.array([ map(float, mat.next().split()) for i in xrange(length) ]) 
    mat.close() 
    return ans 
+0

यह काम नहीं करेगा क्योंकि .mat फ़ाइल ascii नहीं है। आपको त्रुटि प्राप्त होगी: स्ट्रिंग को – ChuNan

+0

@ChuNan को फ़्लो में परिवर्तित नहीं किया जा सकता है, उत्तर ओपी द्वारा निर्दिष्ट प्रारूप को मानता है और इस मामले में यह काम करता है। क्या आपके पास बाइनरी .mat फ़ाइल का उदाहरण है? –

+0

मैंने सभी डबल नंबरों के साथ एक साधारण 3 एक्स 3 मैट्रिक्स उत्पन्न किया। जब मैंने mat.next()। Split() को मुद्रित करने का प्रयास किया, तो यह मुझे दिखाता है: "MATLAB 5.0 MAT-file Platform PCWIN पर बनाया गया ......" और फिर x00 \ x01IM \ x0f \ x00 जैसे कुछ ... । – ChuNan