24小时热门版块排行榜    

查看: 1722  |  回复: 13

astringent

铜虫 (著名写手)


[交流] 【求助】50金币求大家帮忙改一段程序

有一组数据如下所示,第一列代表istep变化范围(1-5000),第二列ia(1-30000),第三列ib(1-800),现在我想用一个三维数组H(istep,ia,ib)来标记这些数据,同一行数字定义的H=1,其他的H均为0.也就是说当istep=1时,ia=781,ib=455时H=1。我的主要目的就是能够将istep,ia,ib用一个函数联系起来,因为在程序后面要用这个函数作为进一步的判断条件。我写了一个程序:
program exam
implicit none
integer ia,ib,istep
integer ::h(5000,30000,800)
integer i



h=0
open (10,file='test.out')
do i=1,99999999
     read(10,*,end=2,err=2) istep,ia,ib
     h(istep,ia,ib)=1
enddo
2 continue
close(10)
do ia=1,30000
    do ib=1,800
         do istep=1,5000
              h(istep)=h(istep,ia,ib)
          enddo
         do ntel=1,nsteps
              if(h(ntel)/=0) then
                进行后面的程序
                -----------------
               endif
         enddo
         enddo
enddo
end
但是现在的问题是,定义的三维数组h太大了,程序不能运行, 请大家帮忙看看应该怎么办?先谢了

数据:
1     758           22
1     820           245
1     2050         399
1     2587         232
1     15733       34
1     18193       65
1     20718       256
2      820           245
2     2050         399
2      2587         232
2     20251        125
3     758           22
3     820           245
3     1817          625
3     2050          399
3     16723        555
3     18193       65
3     20718       256
---
----
----
回复此楼
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

mplanck

至尊木虫 (职业作家)


astringent(金币+5): 2011-04-25 19:59:27
astringent(金币+5): 2011-04-25 20:08:33
粗略一看,没懂你的意思。
你设的数组那么大,内存至少得10G以上,不能运行很正常...
4楼2011-03-28 23:54:35
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

astringent

铜虫 (著名写手)


引用回帖:
Originally posted by mplanck at 2011-03-28 23:54:35:
粗略一看,没懂你的意思。
你设的数组那么大,内存至少得10G以上,不能运行很正常...

以我的第一行数据 1     758           22 为例,1代表istep,758代表ia,22代表ib。 我想用函数将istep,ia,ib联系起来,只有当取我数据中一行上的数字时,定义的函数h=1,其他的h均为0.以第一行为例, istep=1,ia= 758,ib=22时,h=1.或者用多个函数也行,只要能完成后面循环中判断( if(h(ntel)/=0) then)就行。
do ia=1,30000
    do ib=1,800
         do istep=1,5000
              h(istep)=h(istep,ia,ib)
          enddo
         do ntel=1,nsteps
              if(h(ntel)/=0) then
                进行后面的程序
                -----------------
               endif
         enddo
         enddo
enddo
5楼2011-03-29 03:05:47
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

zhuwei04

木虫 (正式写手)


astringent(金币+5): 2011-04-25 20:08:44
给个能读的数据文件,我试试
另外,你的nstep是什么东西?

[ Last edited by zhuwei04 on 2011-3-29 at 16:00 ]
6楼2011-03-29 15:16:15
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

astringent

铜虫 (著名写手)


引用回帖:
Originally posted by zhuwei04 at 2011-03-29 15:16:15:
给个能读的数据文件,我试试
另外,你的nstep是什么东西?

[ Last edited by zhuwei04 on 2011-3-29 at 16:00 ]

nstep可以写成5000,
对我的文件(new_total.out)的说明:
文件的格式为默认写入格式。
第一列代表ia,第二列ib,第三列istep(变化范围1-5000)
文件所在网址:http://good.gd/1078236.htm

[ Last edited by astringent on 2011-3-30 at 05:47 ]
7楼2011-03-30 05:44:34
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
说实话,这个问题,我从头看到尾好几遍,也没有弄明白你到底想达到什么目的……
8楼2011-03-30 09:01:35
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

astringent

铜虫 (著名写手)


引用回帖:
Originally posted by snoopyzhao at 2011-03-30 09:01:35:
说实话,这个问题,我从头看到尾好几遍,也没有弄明白你到底想达到什么目的……

可能是我的表达有问题。
我的数据:
1     758           22
1     820           245
1     2050         399
1     2587         232
1     15733       34
1     18193       65
1     20718       256
2      820           245
2     2050         399
2      2587         232
2     20251        125
3     758           22
3     820           245
3     1817          625
3     2050          399
3     16723        555
3     18193       65
3     20718       256
现有一数据文件test.out,文件结构:第一列istep,第二列ia,第三列ib。istep的变化范围是从1到5000,ia的变化范围是从1到30000,ib的变化范围是从1到800。定义一个三维数组h(5000,30000,800),当h的三维取文件中一行数据时,h=1,否者h=0。我的想法是:从test.out文件读入数据,每读一行(即istep,ia,ib),就将相应的h(istep,ia,ib)赋值为1.相应的程序我是这样写的:
program exam
implicit none
integer ia,ib,istep
integer ::h(5000,30000,800)
integer i

h=0
open (10,file='test.out')
do i=1,99999999
     read(10,*,end=2,err=2) istep,ia,ib
     h(istep,ia,ib)=1
enddo
2 continue
close(10)
当读完文件,就有了三维数组h中每个元素的值(0或1),然后用h是否等于0来做判断条件,进行下面的计算。相应的程序为
do istep=1,5000
    do ia=1,30000
         do ib=1,800
              if (h(istep,ia,ib)/=0) then
                 进行计算---
              endif
          enddo
        enddo
enddo
但是如果像我这样定义三位数组的话,需要的内存太大,程序不运行,所以想请大家帮忙看看,如何修改程序,才能使程序执行判断条件后面的计算。举个例子,当istep=1,ia,ib只有取文件中的值也就是下面这些数据对应h才等于1,可以进行后面的计算。取其他的值时h均为0,不进行后面的计算。
1     758           22
1     820           245
1     2050         399
1     2587         232
1     15733       34
1     18193       65
1     20718       256
9楼2011-03-31 01:08:16
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

zhuwei04

木虫 (正式写手)



ben_ladeng(金币+1): 鼓励交流 2011-04-01 06:32:13
astringent(金币+5): 2011-04-25 20:00:14
第1. 你这样读了数据,怎么有h取成0的情况呢?

第2. 如果只是内存不够的问题,你用动态数组吧,把h的第2列和第3列分别存成两个2维数组Hia, Hib
10楼2011-03-31 07:12:45
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
★ ★
微尘、梦想(金币+2): 谢谢回复…… 2011-04-07 17:39:19
说实话,你解释了那么多还是没有看懂


我的理解是这样的:

对于你的 test.out 来说,你想进行下面的计算,前提是,ia 和 ib 是来自于同一个 istep 的,也就是说,如果 istep == 1,那么 ia 和 ib 应该是:
1     758           22
1     820           245
1     2050         399
1     2587         232
1     15733       34
1     18193       65
1     20718       256
如果 istep == 2,那么下面的数据参加计算:
2      820           245
2     2050         399
2      2587         232
2     20251        125

是这样的吗?
11楼2011-03-31 10:11:20
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

astringent

铜虫 (著名写手)


引用回帖:
Originally posted by snoopyzhao at 2011-03-31 10:11:20:
说实话,你解释了那么多还是没有看懂


我的理解是这样的:

对于你的 test.out 来说,你想进行下面的计算,前提是,ia 和 ib 是来自于同一个 istep 的,也就是说,如果 istep ...

对,就如你所说,如果 istep == 1,那么 ia 和 ib 应该是下面这些值参与计算,当ia,ib取其他值时都不计算:
1     758           22
1     820           245
1     2050         399
1     2587         232
1     15733       34
1     18193       65
1     20718       256
如果 istep == 2,那么下面的数据参加计算:
2      820           245
2     2050         399
2      2587         232
2     20251        125
因为在下面的程序中我用了三个do循环,循环变量分别是istep,ia,ib,当取test.out文件中的相应数据就计算,否者不算。
12楼2011-04-01 01:43:51
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

astringent

铜虫 (著名写手)


引用回帖:
Originally posted by zhuwei04 at 2011-03-31 07:12:45:
第1. 你这样读了数据,怎么有h取成0的情况呢?

第2. 如果只是内存不够的问题,你用动态数组吧,把h的第2列和第3列分别存成两个2维数组Hia, Hib

(1)因为我把h定义为三维数组,第一位对应istep,第二维对应ia,第三位对应ib,因ia,ib只能取某些特定的值,所以这个三维数组h的三维取test.out文件中数据时就为1,取其他值就为0.比方说(以数据第一行为例),当istep=1,ia=758,ib=22时,此时对应的h为h(1,758,22)=1,也就是当istep=1,若ia=758但是ib=1,对应的h为h(1,758,1)就为0.不知道我这样解释清楚没有?
(2)可能是我定义的数组太大,h(5000,30000,800)。及使用动态数组也不行。
13楼2011-04-01 01:51:45
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
引用回帖:
Originally posted by astringent at 2011-04-01 01:51:45:
(1)因为我把h定义为三维数组,第一位对应istep,第二维对应ia,第三位对应ib,因ia,ib只能取某些特定的值,所以这个三维数组h的三维取test.out文件中数据时就为1,取其他值就为0.比方说(以数据第一行为例) ...

我不知道你后面的计算是啥样子的,但我的直觉告诉我你用一个三维数组真得不是很明智的做法,你应该再考虑一下你的算法。

如果我没有记错,你的这个类似问题已经困扰了你很长时间了吧,呵呵……
14楼2011-04-01 09:48:18
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
简单回复
2011-03-23 07:23   回复  
astringent(金币+5): 2011-04-25 19:59:50
zyxme3楼
2011-03-23 08:20   回复  
相关版块跳转 我要订阅楼主 astringent 的主题更新
普通表情 高级回复 (可上传附件)
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[基金申请] 基金不中,共勉 +11 eulota 2026-08-26 11/550 2026-08-28 14:22 by 火星超人xi
[基金申请] 投票:  有多少人是今天查系统知道结果的? +16 爱看书的可乐 2026-08-26 18/900 2026-08-28 14:09 by winsaint
[基金申请] 国自然面上复盘~欢迎讨论 (金币+5) +12 晴天加油 2026-08-26 13/650 2026-08-28 11:32 by skyjudy
[基金申请] 基金系统什么内容也没有 30+4 winsaint 2026-08-27 9/450 2026-08-28 11:06 by maolC
[基金申请] 哪位高人中了,把查询到的截图贴出来让我看看,让我长长见识 +5 yuleib84 2026-08-26 6/300 2026-08-28 00:02 by yudaoqian88
[基金申请] 面上合作单位盖章 +5 ssyjh 2026-08-27 5/250 2026-08-27 20:50 by gdfollow
[基金申请] 申请删除本帖 +6 lyz123lyz 2026-08-27 7/350 2026-08-27 17:31 by 宁静致远sy
[基金申请] 看板上这么多中的,有点像50人群里49个人都是骗子的那种感觉…… +5 a089 2026-08-26 6/300 2026-08-27 14:05 by jonewore
[基金申请] 我不理解! +15 Edward_pc 2026-08-26 23/1150 2026-08-26 20:34 by zzuzxg
[基金申请] 2026年的国家社科基金项目通讯评审的新规则与新动向、新挑战 +7 process2012 2026-08-23 10/500 2026-08-26 19:23 by hmhminy
[基金申请] 范进中举一文的中心思想 +9 炎黄贵胄 2026-08-22 10/500 2026-08-26 15:40 by semaglutide
[基金申请] 2026国自然函评费到账 +22 羊腰板 2026-08-21 25/1250 2026-08-26 15:00 by zuocuiping
[基金申请] 为什么国自然不能直接公布 +4 bjdxyxy 2026-08-26 4/200 2026-08-26 13:12 by qingmu1201
[基金申请] 项目信息和经费信息在系统里都可以看到了 +6 wittyboy 2026-08-26 14/700 2026-08-26 10:55 by wittyboy
[基金申请] 在坚冰还盖着北海的时候,我看到了怒放的梅花。 (金币+10) +6 ziyangfang 2026-08-25 9/450 2026-08-25 20:26 by huagongfeihu
[基金申请] 某些机构,以效率低为荣,以效率低作为存在感 +9 yuleib84 2026-08-25 10/500 2026-08-25 17:14 by alexon
[基金申请] 如果此刻你正在为国基感到焦虑,不妨来听听这首《基金之外》 +8 scalable 2026-08-24 8/400 2026-08-25 12:52 by jnhyjjm
[基金申请] 没有任何消息-是不是就凉了 +9 图啦图啦 2026-08-24 10/500 2026-08-25 11:59 by 南海小哥
[基金申请] 建议基金发布提前给出明确的时间点 +13 kulium 2026-08-21 16/800 2026-08-24 16:27 by superceng
[教师之家] 跳槽后在研项目怎么办? +5 简单化xn 2026-08-22 10/500 2026-08-23 12:38 by 简单化xn
信息提示
请填处理意见