2015-10-24 52 views
2

我是Matlab和Python的新手,我必須將Matlab中的程序轉換爲Python。我不知道如何在從Python中的文件中讀取數據後對數據進行類型轉換。使用的文件是一個二進制文件。Matlab到Python轉換二進制文件讀取

下面是Matlab代碼:

fid = fopen (filename, 'r'); 
fseek (fid, 0, -1); 
meta = zeros (n, 9, 'single'); 
v = zeros (n, 128, 'single'); 
d = 0; 
for i = 1:n 
    meta(i,:) = fread (fid, 9, 'float'); 
    d = fread (fid, 1, 'int'); 
    v(i,:) = fread (fid, d, 'uint8=>single'); 
end 

我已經用Python寫了以下程序:

fid = open(filename, 'r') 
fid.seek(0 , 0) 
meta = np.zeros((n,9),dtype = np.float32) 
v = np.zeros((n,128),dtype = np.float32) 

for i in range(n): 
    data_str = fid.read(9); 
    meta[1,:] = unpack('f', data_str) 

對於這個解壓,我得到錯誤的

「解壓需要長度爲4的字符串參數「

。 請提出建議以使其正常工作。

+0

你應該看看這個線程:http:// stackoverflow .COM /問題/ 3162191/Python的二進制文件,讀取問題。不一定很難,但對於兩種語言的初學者來說都相當有挑戰性。 – jake77

回答

0

我在這個問題上看了一些,主要是因爲我在不久的將來也需要這個。原來,有一個非常簡單的解決方案,使用numpy,假設你像我一樣存儲一個matlab矩陣。

import numpy as np 

def read_matrix(file_name): 
    return np.fromfile(file_name, dtype='<f') # little-endian single precision float 

arr = read_matrix(file_path) 

print arr[0:10] #sample data 
print len(arr) # number of elements 

您必須自己找出數據類型(dtype)。幫助這是here。我使用fwrite(fid,value,'single');來存儲matlab中的數據,如果你有相同的數據,上面的代碼將工作。 請注意,返回的變量是一個列表;你將不得不格式化它以匹配你的數據的原始形狀,在我的情況下len(arr)是307200從矩陣的大小15360 x 20.

相關問題