[英]MATLAB to Python fread
我基本上想做的是將一些MATLAB代碼轉換為Python:
MATLAB代碼:
for time = 100:model_times
for i = 1:5
indat = fread(fid,[48,40],'real*4');
vort(:,:,i,time) = indat';
end
end
fid保留正在使用的文件路徑(DAT文件)。 vort被預先分配為:vort = zeros(40,48,5,model_times)。 model_times是固定整數(例如100)。
似乎正在發生的是,.dat文件數據以48x40矩陣的形式讀入,然后以固定的i和時間(循環計數器)插入預分配的陣列vort中。
我已經在Python中嘗試過此操作:
for time in range(model_times):
for i in range(5):
vort[:,:,i,time] = np.fromfile(fid,np.float64)
我收到一個錯誤,指出“ ValueError:操作數不能與形狀(40,48)(6048000)一起廣播”。 該錯誤發生在上面的Python代碼的最后一行。 我還嘗試將.reshape((40,48,5,model_times))添加到有錯誤的行中,但收到另一個錯誤,指出“ ValueError:新數組的總大小必須保持不變。”
所以我的問題是,與MATLAB的“ fread”等效的Python是什么,它可以處理多維數組?
從1到10的比例,其中1是初學者,而10是經驗豐富的老手,我大約是4。
這也應該起作用。 沒有理由您無法一次完成所有操作:
vort = np.fromfile(fid, np.float64).reshape((model_times,5,48,40)).transpose()
您必須小心地將一維數組重塑為文件中數組索引的本機順序(model_times,5,48,40),然后使用轉置將索引重新排序為所需的順序(40,48,5 ,model_times)。 如果您嘗試直接調整后者的形狀,則會在錯誤的位置獲取數據。
我假設您每次迭代都從二進制文件中讀取48 * 40個元素,每個元素的大小為8個字節。 您的代碼正在中斷,因為默認情況下np.fromfile
讀取每個元素。 要解決這個問題
vort = np.zeros( (48,40,5,model_times) )
for time in xrange(model_times):
for i in xrange(5):
dat = np.fromfile(fid, dtype=np.float64,count = 48*40)
vort(:,:,i,time) = dat.reshape((48,40))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.