Matrix 如何使用Fortran 90将矩阵上的一列转换为多列
我有一列(im=160648)和一行(jm=1)。我想把它转换成一个大小为(im=344)和(jm=467)的矩阵 我的程序代码是Matrix 如何使用Fortran 90将矩阵上的一列转换为多列,matrix,fortran,transform,gfortran,fortran90,Matrix,Fortran,Transform,Gfortran,Fortran90,我有一列(im=160648)和一行(jm=1)。我想把它转换成一个大小为(im=344)和(jm=467)的矩阵 我的程序代码是 program matrix parameter (im=160648, jm=1) dimension h(im,jm) integer::h open (1,file="Hasil.txt", status='old') open (2,file="HasilNN.txt", status='unknown') do i=1,jm
program matrix
parameter (im=160648, jm=1)
dimension h(im,jm)
integer::h
open (1,file="Hasil.txt", status='old')
open (2,file="HasilNN.txt", status='unknown')
do i=1,jm
read(1,*)(h(i,j)),j=1,jm)
end do
do i=1,im
write(2,33)(h(i,j),j=1,jm)
end do
33 format(1x, 344f10.6)
end program matrix
当读取(1,*)(h(i,j)),j=1,jm)
数据类型为浮动数据
您的读取循环是:
do i=1,jm
read(1,*)(h(i,j)),j=1,jm)
end do
难道i=1,jm不应该是i=1,im吗?
这意味着格式化的文本文件Hasil.txt中有“im”记录(行),您的问题表明了这一点
read(1,*)(h(i,j)),j=1,jm)
表示每条记录(文本行)都有“jm”值,即每行1个值。这是文件的样子吗?(此read(lu,*)…
语句将跳过未知数量的空行。)
您似乎想将此信息写入另一个文件;HasilNN.txt使用33格式(1x,344f10.6)
表示每行3441个字符,尽管write语句每行只写1个值(因为jm=1)。对于文本文件来说,这将是一个非常长的行,并且可能很难在程序之外进行管理。如果您确实希望这样做,可以通过隐含的do循环来实现,例如:
write(2,33) ((h(i,j),j=1,jm),I=1,im)
几点意见:
使用jm=1意味着每行只有一个值,可以等价地表示为1d向量“维h(im)”,不需要j
文件单元号1和2通常是屏幕/键盘的保留单元号。你最好使用第11单元和第12单元
在设计这段代码时,您需要处理2个文件中的记录结构,因为可以使用一个简单的向量。您可以使用格式控制行长度。(1x,8f10.6)格式将创建81个字符的记录,这将更易于管理
格式描述符f10.6还限制了您可以在文件中管理的值的范围。值>=1000或我所指的语法错误在
(h(I,j)),j=1,jm)
中,在h(I,j)
之后加上额外的)
。我投票决定以一个简单的打字错误结束这个问题。还有一个事实是,h
是整数,但被视为实数。