Matrix 如何使用Fortran 90将矩阵上的一列转换为多列

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

我有一列(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
         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
是整数,但被视为实数。