簡體   English   中英

MATLAB to Python讀取

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM