我的问题是我有一个数组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
答案 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);