读取.CSV用于存储Fortran数组

时间:2017-10-24 09:52:09

标签: arrays matlab csv fortran

我的问题是我有一个数组a(2,3,4),我将这个数组作为CSV文件传输给Fortran。

然后,在Fortran中,我创建了数组并尝试阅读它。

但是当我检查相同元素的值(例如a(2,1,1))时,Fortran显示的值与Matlab中相同元素的值不同。

我复制了我开发的代码

program test_dot_prod          

    real, dimension(:, :, :), allocatable :: a 

    open (unit=102, file='a.csv',  status='old', action='read')          

    allocate(a(2, 3, 4))

    read(102, *), a    

    write(*,*) a(2, 1, 1)

    write(*,*) a(1, 2, 1) 

    write(*,*) a(1, 1, 2)     

end

例如,我在Matlab中的值是a(2,1,1) = 0.3012

在Fortran中,同一点a(2,1,1) = 0.4709

我转移到fortran的.CSV具有以下结构。

0.20774,0.47092,0.84431,0.22592,0.22766,0.3111,0.43021,0.90488,0.43887,0.25806,0.5949,0.60284

0.30125,0.23049,0.19476,0.17071,0.4357,0.92338,0.18482,0.97975,0.11112,0.40872,0.26221,0.71122

1 个答案:

答案 0 :(得分:0)

根据我的评论,哄骗matlab以其原生存储顺序编写多维数组并不是那么简单。你需要制作一个扁平的副本,

tmp=reshape(a,numel(a),1);
save(filename,'tmp','-ASCII')

您也可以使用dlmwrite

fortran将使用单个read(unit,*)a读取此文件,并为您提供正确的排序。

编辑..这样可以避免复制,但您需要提供适当的格式说明符:

fileID = fopen(filename,'w');
fprintf(fileID,'%12.8f',a);
fclose(fileID);