Python

2013-02-07 4 views
8

içine Matlab matris oku, aşağıdaki hatayı alıyorumPython

>>> 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 matrisi

% 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

Matlab'ın hangi sürümü bu '* .mat'? – tacaswell

+1

Bir Petsc paketinden çıktı ve Matlab tarafından oluşturulmamış – Hesam

+0

"Gerçek" Matlab dosyalarını okuyabilir misiniz? Matlab dosyanızı okuyabilir mi? Matlab'ın sesleri gibi formatlarla bazı üçüncü taraf paketlerinin kullanılması sorun ... – Floris

cevap

2

içeren bir dosyadır Bu soru bir süreliğine etkisiz gibi gözüküyor, ama yine de bu .mat dosyasını okumak için hala bir alternatife izin vermeniz iyi bir şeydir, her zaman belirttiğiniz formatta olduğunu varsayarak:

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 dosyası ascii olmadığı için bu işe yaramaz. Hatayı alacaksınız: dize float – ChuNan

+0

@ ChuNan dönüştüremedi, OP tarafından belirtilen biçimi varsayar ve bu durumda çalışır. İkili bir .mat dosyası örneğiniz var mı? –

+0

Tüm çift sayılarla basit bir 3X3 matrisi oluşturdum. Mat.next(). Split() 'i yazdırmaya çalıştığımda bana şunu gösterir: "MATLAB 5.0 MAT-Dosya Platformu PCWIN ...... üzerinde yaratıldı" ve sonra x00 \ x01IM \ x0f \ x00 gibi bir şey ... . – ChuNan