我有一個無格式(我認爲是二進制)數據的.img文件,我想在Matlab中將它讀入浮點數組成四維數組。我注意到,在Matlab中「FREAD」功能用於讀取二進制數據只能自動讀入一維或二維數組,所以我想是這樣的:在Matlab中將未格式化的數據讀入4D數組(012)
function fileArr4D= load4DFile(dim1, dim2, dim3, dim4, filename)
fileArr4D= zeros(dim1, dim2, dim3, dim4); %initialize array
fid= fopen(strcat('files/', filename));
for l= 1:dim4
for k= 1:dim3
fileArr4D(:, :, k, dim4)= fread(fid, [dim1, dim2], 'float');
end
end
fclose(fid);
fileArr4D= flipdim(fileArr4D, 2); %flips along dimension 2 (of 4)
end
最後一行是翻轉的數據(一些具體的事情到數據),並且我包含它的唯一原因是萬一它是錯誤的來源。
無論如何,這個函數給了我一個4D數組,但沒有我想要的值。其實我翻譯從IDL Matlab的一些代碼,並在IDL,實現如下:
pp=fltarr(dim1,dim2,dim3,dim4)
file='pathto/filename.img'
openr,1,file
readu,1,pp
pp=reverse(pp,2)
close,1
然而,比較由fileArr4D在Matlab與IDL,最小,最大PP返回的數組,而平均數組都是不同的。任何關於在這兩種情況下做什麼不同的想法,或者在Matlab中將二進制數據讀入四維數組的更自然的方法?
順便說一句,如果我切換Matlab函數中的循環順序(f or k= 1:dim3, for l= 1:dim4, ...
而不是for l= 1:dim4, for k= 1:dim3, ...
),我會得到正確的最小值和最大值但錯誤的平均值(與以前的平均值相同)。
任何幫助將IDL片段的行爲獲取到Matlab將不勝感激。
工作就像一個魅力,謝謝! – Marvin