24小时热门版块排行榜    

查看: 587  |  回复: 10

贺仪

铁杆木虫 (著名写手)

[求助] 动态数组分配

我有一个数组cc(:,:,:)我通过读取文件 知道其中的前两维如(8,6,:),第三维要在定义以后才知道。
程序结构是这样的:
读取文件知道cc大小是(8,6,,第三维未知
然后进入循环读取
do i=1,8
           do j=1,6
            读取文件,知道cc(i,j,:)的第三维,但是每次大小都不一样:如cc(1,1,:)有5623个,cc(2,1,有1234个,(这里面最大的也不知道)
            然后读取     给 cc(i,j,5623)赋值
           enddo
enddo

请问只里面怎么是用动态分配?可以这样吗?:
      ALLOCATE(CC(NBAND,NKPTS, )先定下二维,然后在循环里面定义第三维吗?可以的话应该怎么弄?这样就会不会多次分配而出错?

或者有什么方法可以读取出来?
回复此楼
嘟啦啦嘟啦啦嘟
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

贺仪

铁杆木虫 (著名写手)

:)是:和)
嘟啦啦嘟啦啦嘟
2楼2011-11-10 15:36:09
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

贺仪

铁杆木虫 (著名写手)

笑脸是:和)
嘟啦啦嘟啦啦嘟
3楼2011-11-10 15:36:36
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

koorb

铁虫 (初入文坛)

【答案】应助回帖


贺仪(金币+2): 多谢建议 2011-11-10 16:40:46
余泽成(金币+1): 谢谢参与应助!欢迎常来程序语言版! 2011-11-10 21:47:42
数组的3个维数是只能到程序运行到最后才能知道第3维的最大值,比如是D3。这时候数组才最后确定为ALLOCATE(CC(NBAND,NKPTS,D3 )。之前可以再定义一个临时变量暂时保存数据。

或者用链表,也就另外一种数据结构。
天道
4楼2011-11-10 15:53:58
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

koorb

铁虫 (初入文坛)

【答案】应助回帖

贺仪(金币+2): 多谢建议 2011-11-10 16:40:54
如果我没理解错的话,你是要将48个长度未知且不等的数组保存起来。
先动态定义一个6×8的二维数组。这个二维数组的数据类型是“数组”,也就是之前说的48个数组。
天道
5楼2011-11-10 16:01:14
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

贺仪

铁杆木虫 (著名写手)

引用回帖:
5楼: Originally posted by koorb at 2011-11-10 16:01:14:
如果我没理解错的话,你是要将48个长度未知且不等的数组保存起来。
先动态定义一个6×8的二维数组。这个二维数组的数据类型是“数组”,也就是之前说的48个数组。

是的 但这只是举个例子,真正的数组会达到30*50

但是变成48个二维数组也没什意义,还是不能在这之前定义保存起来。

前面说的用一个临时变量那也要48个变量呀……

另外链表怎么用?可否大概说一下我的这个问题怎么解决?
嘟啦啦嘟啦啦嘟
6楼2011-11-10 16:40:17
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

koorb

铁虫 (初入文坛)

【答案】应助回帖


贺仪(金币+2): 谢谢,还是有点问题…… 2011-11-11 09:43:31
xzhdty(金币+1): 欢迎常来程序语言讨论 2011-11-11 10:46:21
引用回帖:
6楼: Originally posted by 贺仪 at 2011-11-10 16:40:17:
是的 但这只是举个例子,真正的数组会达到30*50

但是变成48个二维数组也没什意义,还是不能在这之前定义保存起来。

前面说的用一个临时变量那也要48个变量呀……

另外链表怎么用?可否大概说一下我的这 ...

30×50和6×8对应编程来说又有什么区别呢?
我说的3个方案都是可行的,只是你否定得太快了。
如果你不能从下面的例子中得到启示的话,那就算了。
   integer d1,d2,d3,i,j,k
    double precision, allocatable::array(:,:,
    d1=2
    d2=3
    d3=1
    allocate(array(d1,d2,d3))
    print *, array
    print *, "*****************"
    do i=1,d1
        do j=1,d2
            deallocate(array)!deallocate之前保存数据到临时数组里。
            d3=2
            allocate(array(d1,d2,d3))
        end do
    end do
    print *, array
天道
7楼2011-11-11 08:03:30
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

贺仪

铁杆木虫 (著名写手)

引用回帖:
7楼: Originally posted by koorb at 2011-11-11 08:03:30:
30×50和6×8对应编程来说又有什么区别呢?
我说的3个方案都是可行的,只是你否定得太快了。
如果你不能从下面的例子中得到启示的话,那就算了。
   integer d1,d2,d3,i,j,k
    double precision, allocata ...

看完之后始终不知道你的临时文件怎么处理……
      你一句话说保存到临时变量,可这个过程怎么弄呢?如果还是一个数组的话, 还是回答原来的问题了。如果是我没明白你的意思,麻烦你在写详细点可以吗?只要解决了金币可以全部给你。
      其实,我自己已经找到了解决问题的方法,先把文件读取一次得到第三维数最大的值,然后再重新打开文件并分配数组,这样读取数据就可以了。
嘟啦啦嘟啦啦嘟
8楼2011-11-11 09:43:13
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

fubao-411

木虫 (小有名气)

【答案】应助回帖


xzhdty: 欢迎常来程序语言讨论 2011-11-11 10:46:29
余泽成(金币+1): 谢谢参与应助!欢迎常来程序语言版! 2011-11-13 21:04:04
可以先定义一个足够大的数组,全部初始化为0,读取完数据后,再处理其中有用的数据,其他的数据可以丢掉,如只处理其中不为0的数据 ....
轻松走一回!
9楼2011-11-11 09:57:01
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

小子wx

铜虫 (小有名气)

楼主问题解决了没有?   解决了的话麻烦把具体方法和程序写一下  大家都学习学习吗
10楼2011-11-23 20:36:08
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 贺仪 的主题更新
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[公派出国] 售SCI一区文章,我:8 O5 51O 54,科目齐全 +3 5lbyq5wrhb 2026-02-07 3/150 2026-02-08 03:05 by vs90ilomwc
[考博] 售SCI一区文章,我:8 O5 51O 54,科目齐全 +3 5lbyq5wrhb 2026-02-07 3/150 2026-02-08 02:52 by vs90ilomwc
[论文投稿] 售SCI一区文章,我:8 O5 51O 54,科目齐全 +3 3rkserf6qr 2026-02-07 4/200 2026-02-08 02:45 by vs90ilomwc
[硕博家园] 售SCI一区文章,我:8 O5 51O 54,科目齐全 +3 3rkserf6qr 2026-02-07 3/150 2026-02-08 02:32 by vs90ilomwc
[考博] 售SCI一区文章,我:8 O5 51O 54,科目齐全 +5 2h7du0nuhk 2026-02-07 5/250 2026-02-08 02:25 by vs90ilomwc
[硕博家园] 售SCI一区文章,我:8 O5 51O 54,科目齐全 +4 2h7du0nuhk 2026-02-07 5/250 2026-02-08 02:12 by vs90ilomwc
[教师之家] 售SCI一区文章,我:8 O5 51O 54,科目齐全 +4 2h7du0nuhk 2026-02-07 6/300 2026-02-08 02:05 by vs90ilomwc
[找工作] 售SCI一区文章,我:8 O5 51O 54,科目齐全 +4 2h7du0nuhk 2026-02-07 6/300 2026-02-08 01:46 by vs90ilomwc
[公派出国] 售SCI一区文章,我:8 O5 51O 54,科目齐全 +4 2h7du0nuhk 2026-02-07 7/350 2026-02-08 01:45 by vs90ilomwc
[考博] 售SCI一区文章,我:8 O5 51O 54,科目齐全 +4 2h7du0nuhk 2026-02-07 7/350 2026-02-08 01:32 by vs90ilomwc
[教师之家] 售SCI一区文章,我:8 O5 51O 54,科目齐全 +4 2h7du0nuhk 2026-02-07 7/350 2026-02-08 01:26 by vs90ilomwc
[硕博家园] 售SCI一区文章,我:8 O5 51O 54,科目齐全 +4 2h7du0nuhk 2026-02-07 7/350 2026-02-08 01:12 by vs90ilomwc
[教师之家] 有院领导为了换新车,用横向课题经费买了俩车 +7 瞬息宇宙 2026-02-04 7/350 2026-02-07 21:47 by tfang
[有机交流] 酰胺脱乙酰基 10+5 chibby 2026-02-03 12/600 2026-02-07 19:29 by 江东闲人
[基金申请] 同年申请2项不同项目,第1个项目里不写第2个项目的信息,可以吗 +4 hitsdu 2026-02-06 4/200 2026-02-07 13:07 by jurkat.1640
[基金申请] 有时候真觉得大城市人没有县城人甚至个体户幸福 +9 苏东坡二世 2026-02-04 10/500 2026-02-07 12:37 by 小毛球
[考博] 天津大学招2026.09的博士生,欢迎大家推荐交流(博导是本人) +4 a793625982 2026-02-05 5/250 2026-02-07 10:57 by a793625982
[公派出国] CSC & MSCA 博洛尼亚大学能源材料课题组博士/博士后招生|MSCA经费充足、排名优 +4 雨念 2026-02-01 6/300 2026-02-06 23:32 by MelissaPon
[基金申请] 面上项目申报 +3 Tide man 2026-02-01 3/150 2026-02-05 22:56 by god_tian
[硕博家园] 博士延得我,科研能力直往上蹿 +7 偏振片 2026-02-02 7/350 2026-02-04 17:36 by 陈氏帝国
信息提示
请填处理意见