gpt4 book ai didi

multidimensional-array - 如何确定文本文件中多个矩阵的维数

转载 作者:行者123 更新时间:2023-12-04 08:41:56 25 4
gpt4 key购买 nike

我想知道从文件中读取的几个矩阵的维数。我已经编写了代码来计算矩阵的行数和元素总数,因此知道列数,将元素总数除以行数。

program matrix
implicit none

integer,dimension(:),allocatable::total
integer row,io,countRows,columns,m,numElements

open(12,file='matrix.txt',status='old',iostat=io)
if (io.ne.0) then
write(*,*)'error to open file'
stop
end if

!count rows
countRows=0
io=0
do while (io.ge.0)
read(12,*,iostat=io) row
if (io.eq.0) countRows=countRows+1
end do
rewind(12)

!total of elements
io=0
do m=1,1000
allocate(total(m))
read(12,*,iostat=io) total
deallocate(total)
rewind(12)
if (io.ne.0) exit
end do

numElements=size(total)-1
columns=numElements/countRows

close(12)
end program

问题是它只有在文件中有矩阵时才有效,因为如果有几个,用一个或几个空行分隔,它会告诉我文件的总行数和总元素数。我需要知道如何分离这些矩阵以独立计算它们的行和列。

示例文件可能看起来像

90 21 11 13
12 11 10 11
33 44 76 55

12 12
87 99

33 12 17
45 98 77

最佳答案

我可以提出这样的解决方案,不是花哨的解决方案,但似乎适用于示例:

program matrix
implicit none

integer,dimension(:),allocatable::total
integer row,io,countRows,columns,m,numElements,icol
integer mlocs(100,2),imat,countMat,countSpace,nmats
character(len=256) line
character linechar

mlocs=0;
open(12,file='matrix.txt',status='old',iostat=io)
if (io.ne.0) then
write(*,*)'error to open file'
stop
end if

!count rows
countRows=0
countMat=1;countSpace=0;

do while (1.gt.0.0)
read(12,'(a)',end=100) line
print*,trim(line)
countRows=countRows+1;countSpace=1;
if (len(trim(line)).eq.0) then
countMat=countMat+1;mlocs(countMat,1)=countRows;
elseif (len(trim(line)).gt.0) then
do icol=1,len(trim(line))
read(line(icol:icol),'(a)') linechar
if (linechar.eq.' ') then
countSpace=countSpace+1;
mlocs(countMat,2)=countSpace
endif
enddo
endif
end do
100 print*,'Number of lines is ',countRows
print*,'Number of matrices is ',countMat
nmats=countMat;

do imat=1,nmats
print*,'NUmber of elements in matrix ',imat,' is ',mlocs(imat,2:2)
enddo

close(12)
end program

关于multidimensional-array - 如何确定文本文件中多个矩阵的维数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52741785/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com