【问题标题】:Reading unformatted data into 4D array in Matlab (vs IDL)在 Matlab 中将未格式化的数据读入 4D 数组(vs IDL)
【发布时间】:2011-06-22 21:04:18
【问题描述】:

我有一个未格式化(我认为是二进制)数据的 .img 文件,我想将其作为浮点数读取到 Matlab 中的 4D 数组中。我注意到 Matlab 中用于读取二进制数据的 'fread' 函数只能自动读入 1D 或 2D 数组,所以我尝试了这样的操作:

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

但是,将 Matlab 中 fileArr4D 返回的数组与 IDL 中的 pp 进行比较,数组的最小值、最大值和平均值都不同。关于在这两种情况下的不同之处,或者在 Matlab 中将二进制数据读入 4D 数组的更自然的方法,有什么想法吗?

顺便说一句,如果我在 Matlab 函数中切换循环顺序(for k= 1:dim3, for l= 1:dim4, ... 而不是for l= 1:dim4, for k= 1:dim3, ...),我会得到正确的最小值和最大值,但平均值是错误的(与以前的平均值相同)。

将不胜感激将 IDL sn-p 的行为导入 Matlab 的任何帮助。

【问题讨论】:

    标签: matlab io binary-data idl-programming-language


    【解决方案1】:

    由于您想使用fread 访问数据并且它只能读取一维或二维数组,我建议将数据作为一维数组加载。一旦您将数据作为一维数组,只要您知道维度应该是什么,您就可以调用一维数组上的reshape 函数将其重新格式化为适当大小的四维数组。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-21
      • 1970-01-01
      • 1970-01-01
      • 2022-11-17
      • 1970-01-01
      • 2012-11-03
      • 2014-06-12
      • 1970-01-01
      相关资源
      最近更新 更多