24小时热门版块排行榜    

CyRhmU.jpeg
南方科技大学公共卫生及应急管理学院2025级博士研究生招生报考通知
查看: 1554  |  回复: 9

wysqh

木虫 (小有名气)


[交流] 【求助】matlab数据导入Fortran

目前有一个用matlab产生的一个128*128特定矩阵 存为data.dat文件  现在想要将这个矩阵导入到Fortran中存为eta(i,j) 行列要一一对应 该如何实现呢?
回复此楼

» 猜你喜欢

» 抢金币啦!回帖就可以得到:

查看全部散金贴

已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
★ ★
微尘、梦想(金币+2): 谢谢回贴…… 2011-04-11 11:30:55
你的 data.dat 是个文本文件?

直接读入不就可以了吗?也不是啥难事儿……

行列对应无非就是循环的下标排列的问题。

给个列子说明要如何一一对应……
2楼2011-04-11 10:57:13
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
如果没有记错,matlab 与 Fortran 的矩阵存贮格式是一致的。
3楼2011-04-11 10:57:41
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

wysqh

木虫 (小有名气)


引用回帖:
Originally posted by snoopyzhao at 2011-04-11 10:57:13:
你的 data.dat 是个文本文件?

直接读入不就可以了吗?也不是啥难事儿……

行列对应无非就是循环的下标排列的问题。

给个列子说明要如何一一对应……

data.dat文件 是按照一行一行的存的 如附件
就想实现 eta(i,j) 每一行与文件里面的每一行相对应 也是128*128排列
是采用read语句实现吗?具体程序该怎么写啊。。

[ Last edited by wysqh on 2011-4-11 at 11:34 ]
4楼2011-04-11 11:33:08
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

dingxb

金虫 (正式写手)


wysqh(金币+3): 多谢交流~ 2011-04-12 08:27:27
do i = 1, 128
do j = 1, 128
  read(file, *) eta(i,j)
end do
end do

基本结构如此,如果需要指定格式的话,替换read语句中的*为格式描述。
5楼2011-04-11 14:17:55
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

dingxb

金虫 (正式写手)


为了确保读的正确,一般我都是输出进行比较。
6楼2011-04-11 14:18:53
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
引用回帖:
Originally posted by dingxb at 2011-04-11 14:17:55:
do i = 1, 128
do j = 1, 128
  read(file, *) eta(i,j)
end do
end do

基本结构如此,如果需要指定格式的话,替换read语句中的*为格式描述。

其实一句话就够了,呵呵……
CODE:
read(unit=5, *) ((eta(i,j), j = 1,128),i=1,128)

7楼2011-04-11 17:50:29
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

wysqh

木虫 (小有名气)


引用回帖:
Originally posted by dingxb at 2011-04-11 14:17:55:
do i = 1, 128
do j = 1, 128
  read(file, *) eta(i,j)
end do
end do

基本结构如此,如果需要指定格式的话,替换read语句中的*为格式描述。

我开始是这样做的 但是运行之后会出现下面的错误

8楼2011-04-11 22:10:37
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

wysqh

木虫 (小有名气)


引用回帖:
Originally posted by snoopyzhao at 2011-04-11 17:50:29:
其实一句话就够了,呵呵……
CODE:
read(unit=5, *) ((eta(i,j), j = 1,128),i=1,128)


read(unit=5, *) ((eta(i,j), j = 1,128),i=1,128)
是不是少了一个括号?
9楼2011-04-11 22:14:10
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
wysqh(金币+7): 谢谢你的建议~因为不是专门搞这个的 很多东西不懂 2011-04-12 08:27:11
引用回帖:
Originally posted by wysqh at 2011-04-11 22:14:10:
read(unit=5, *) ((eta(i,j), j = 1,128),i=1,128)
是不是少了一个括号?

数括号我还是会的,我不知道你咋看出来少了一个括号,呵呵……

下面是我测试过的代码:
CODE:
program readata
real(kind=kind(1.0d0)), dimension(128,128) :: mat
integer :: i,j

read(unit=5,fmt=*) ((mat(i,j), j = 1,128),i=1,128)

!do i=1,128
!   write(*,*) (mat(i,j), j = 1,128)
!end do

end program readata

10楼2011-04-11 23:16:05
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 wysqh 的主题更新
普通表情 高级回复(可上传附件)
信息提示
请填处理意见