我想从文本文件中读取数组 看起来像这样
1 88 90 94 102 111 122 134
2 75 77 80 86 94 103 113
3 80 83 85 94 100 111 121
4 68 71 76 85 96 110 125
5 77 84 91 98 105 112 119
6 81 85 90 96 102 109 120
(以上数据为6乘8矩阵,间隔均匀,可能无法正确显示
我的代码
program cool
implicit none
integer:: ok(6,8),k,i
open(unit = 1, file = "a.txt")
read(1,*) ok
Write(*,*) ok
print*,ok_1(4,3)
end program cool
我遇到的问题是确定(4,3)与71(第4行,第3列)不对应
我试过读过像这样的文件 读(单位= 1,10)好 10格式(8(i4))
!我尝试过这个
的变种我尝试的任何方式,调用ok(i,j)并不符合我需要的值
我需要这个来查找包含第一列的行平均值和列平均值。只要我能得到正确的值,这就是Do循环这很简单,我不能
编辑:: 我也试图在我的程序中硬编码数组 ok =重塑((/ 1,88,90,94,102,111,122,134,& 2,75,77,80,86,94,103,113,& 3,80,83,85,94,100,111,121,& 4,68,71,76,85,96,110,125,& 5,77,84,91,98,105,112,119,& 6,81,85,90,96,102,109,120 /),(/ 6,8 /))但是这似乎也没有使得对应以及(4,4)返回100而不是76
答案 0 :(得分:2)
Fortran以 column-major 顺序将其数组存储在内存中,因此元素ok(1,1)
后跟元素ok(2,1), ok(3,1), ...
,依此类推。方便的陈述
read(1,*) ok
按顺序将数字读入数组。在同一个元素列表上使用reshape
会产生相同的数组。
也许您认为数组将存储在 row-major 顺序中,ok(1,1), ok(1,2), ok(1,3), ...
?
您可以逐行读取文件,例如
do ix = 1, 6
read(1,*) ok(ix,:)
end do
或将文件一次性读入8*6
临时数组并转置它。或者您可以重新排序文件中的元素。