24小时热门版块排行榜    

查看: 835  |  回复: 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-T0P文章,我:8O.5.5.1.O.54,科目齐全,可+急 +3 E4V9bALS54sj 2026-09-19 4/200 2026-09-20 07:24 by 9i7PCSZyMzot
[论文投稿] 售SCI文章,我:8O5.5.1.O.54,科目齐全,可+急 +3 E4V9bALS54sj 2026-09-19 4/200 2026-09-20 07:24 by 9i7PCSZyMzot
[硕博家园] 售SCI文章,我:8O.5.5.1O.54,科目全,可十急 +3 E4V9bALS54sj 2026-09-19 4/200 2026-09-20 07:12 by 9i7PCSZyMzot
[博后之家] 售SCI一区T0P文章,我:8.O.55.1.O.5.4,科目全,可+急 +3 E4V9bALS54sj 2026-09-19 4/200 2026-09-20 07:12 by 9i7PCSZyMzot
[公派出国] 售SCI一区T0P文章,我:8O.55.1.O.5.4,科目齐全,可+急 +3 E4V9bALS54sj 2026-09-19 4/200 2026-09-20 07:06 by 9i7PCSZyMzot
[考博] 售SCI文章,我:8O.5.5.1O.54,科目全,可十急 +3 E4V9bALS54sj 2026-09-19 4/200 2026-09-20 07:01 by 9i7PCSZyMzot
[基金申请] 售SCI一区T0P文章,我:8O.55.1.O.54,科目全,可伽急 +3 E4V9bALS54sj 2026-09-19 4/200 2026-09-20 07:01 by 9i7PCSZyMzot
[论文投稿] 售SCI文章,我:8O5.5.1.O.54,科目齐全,可+急 +3 E4V9bALS54sj 2026-09-19 4/200 2026-09-20 06:55 by 9i7PCSZyMzot
[考研] 售SCI一区文章,我:8O5.5.1.O5.4,科目全,可伽急 +3 4pRyVGCVerAA 2026-09-19 3/150 2026-09-20 00:15 by 9i7PCSZyMzot
[找工作] 售SCI一区T0P文章,我:8.O55.1.O.54,科目全,可十急 +4 4pRyVGCVerAA 2026-09-19 4/200 2026-09-20 00:03 by 9i7PCSZyMzot
[考博] 售SCI一区T0P文章,我:8.O.55.1.O54,科目全,可伽急 +3 4pRyVGCVerAA 2026-09-19 4/200 2026-09-19 23:51 by 9i7PCSZyMzot
[基金申请] 售SCI一区T0P文章,我:8.O55.1.O.54,科目全,可十急 +3 4pRyVGCVerAA 2026-09-19 4/200 2026-09-19 23:39 by 9i7PCSZyMzot
[考研] 售SCI一区T0P文章,我:8.O55.1.O.54,科目全,可十急 +3 4pRyVGCVerAA 2026-09-19 4/200 2026-09-19 23:27 by 9i7PCSZyMzot
[公派出国] 售SCI一区T0P文章,我:8.O.55.1.O54,科目全,可伽急 +3 4pRyVGCVerAA 2026-09-19 4/200 2026-09-19 23:03 by 9i7PCSZyMzot
[考博] 售SCI一区T0P文章,我:8.O.55.1.O.54,科目齐全,可+急 +3 4pRyVGCVerAA 2026-09-19 4/200 2026-09-19 23:03 by 9i7PCSZyMzot
[公派出国] 售SCI文章,我:8O5.5.1.O.54,科目齐全,可+急 +3 4pRyVGCVerAA 2026-09-18 7/350 2026-09-19 21:03 by 9i7PCSZyMzot
[基金申请] 国社科系统bug了,是不是要放榜了? +7 kynobel 2026-09-16 9/450 2026-09-19 14:52 by 接好运婷
[考博] 申博发邮件 +8 Lmengk 2026-09-15 9/450 2026-09-19 09:27 by 中间体超市
[有机交流] 各位大神,目前国内有哪些比较好用的逆合成软件? 20+3 zapen 2026-09-15 9/450 2026-09-18 18:17 by zapen
[考博] 上海工程技术大学激光智能制造课题组招收博士研究生 +8 两三岁ss 2026-09-14 8/400 2026-09-16 09:46 by 水士口
信息提示
请填处理意见