24小时热门版块排行榜    

查看: 2891  |  回复: 12
当前只显示满足指定条件的回帖,点击这里查看本话题的所有回帖

qingkonggzc

银虫 (小有名气)

[交流] fortran动态数组大小分配问题(allocatable)? 已有2人参与

各位大神,我定义了一个动态数组type(sta_information),allocatable::sta_info(,在给sta_info分配大小的时候遇到了问题,我有一个循环,想让这个数组的大小随着循环变化可以吗?还是必须要开始时就指定一个较大的能放下所有数据/字符串的数组?因为我把所有数据放进去之后要进行从A到Z的排序,如果数组太大有空的会不会影响排序?
就是第一个循环大小分配55,到第二个循环的时候让他大小变成100,第三个循环的时候大小变成200(也就是分别产生55,45,100个数据),因为不知道数据总量,不想刚开始就把大小设置的比较大,比如allocate(sta_info(1000))等,请问这个可以如何处理,谢谢~~~
回复此楼

» 猜你喜欢

» 本主题相关价值贴推荐,对您同样有帮助:

已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

qingkonggzc

银虫 (小有名气)

引用回帖:
6楼: Originally posted by 浔荆 at 2015-05-28 08:13:16
对,是一样的。不一样的只是你可以针对非空元素进行操作而已。
假设有n个有效数据,剩余的全是空值。那么,你排序只需要对这n个数据排序就行了,不需要提取出来也不需要中间数组。直接操作部分数组就行。
你 ...

你好,我还是有点不明白只对1~n号元素进行排序的意思,虽然我想要的是这个结果,是对n号元素排序之后新放到一个数组里面还是在原来的数组里面,最后面的还是空?
allocate(sta_info(0:1000))
sta_info=-10000                   !初始化为一个不常见的数,方便调试
sta_info(0)=55                     !确定你需要的数组大小
do i=1,sta_info(0)
     sta_info(i)=.....
enddo

sta_info=-10000是相当于给这数组一个unit嘛?不太明白这个初始化的意思。。
sta_info(0)=55                     !确定你需要的数组大小
do i=1,sta_info(0)
     sta_info(i)=.....
enddo
这个当把第二个循环的大小确定为100的时候,怎么样能使它接着在sta_info后面写45个数据,这样应该会使它覆盖掉前一循环的数据吧?还是把大小也存放到一个数组里面,每次循环do从sta_num(i-1)~sta_num(i)?
7楼2015-05-28 09:48:17
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
查看全部 13 个回答

浔荆

木虫 (正式写手)


小木虫: 金币+0.5, 给个红包,谢谢回帖
我也常遇到这样的问题,一般我是通过以下方案解决的。
定义一个很大的数组,如sta_info(0:1000)。
之所以定义成sta_info(0:1000)而非sta_info(1:1000),并不是因为我习惯了C语言里的数组默认下标从0开始。实际上,这里的sta_info(0)和其他元素不一样,它是用来记录整个数组的有效大小的。
例如,我们在第一个循环给元素0:55赋值,其他的元素用不到,可以这么实现:
allocate(sta_info(0:1000))
sta_info=-10000                   !初始化为一个不常见的数,方便调试
sta_info(0)=55                     !确定你需要的数组大小
do i=1,sta_info(0)
     sta_info(i)=.....
enddo

简单来说,就是先分配足够的大小,但另外定义一个变量来描述它的实际大小。这样一来避免了数组大小变化的时候,需要频繁的allocate和deallocate。另一方面又可以避免数组太大而带来的速率降低。(排序这样的数组操作,只需要对1:sta_info(0)这些元素进行即可)
2楼2015-05-27 08:19:38
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

pippi6

铁杆木虫 (著名写手)

工程和科学数值计算咨询


小木虫: 金币+0.5, 给个红包,谢谢回帖
subroutine DynamicArray
  implicit none
  real*8, allocatable, dimension( :: sta_info
  integer :: i,n=20,j

  do i=1,n
     allocate(sta_info(i))
     
     do j=1,i
        sta_info(j)=j
     end do
     print*,' i=',i,' sizeof(sta_info)=',sizeof(sta_info)
     deallocate(sta_info)
  end do
end subroutine DynamicArray
3楼2015-05-27 13:14:14
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

qingkonggzc

银虫 (小有名气)

引用回帖:
2楼: Originally posted by 浔荆 at 2015-05-27 08:19:38
我也常遇到这样的问题,一般我是通过以下方案解决的。
定义一个很大的数组,如sta_info(0:1000)。
之所以定义成sta_info(0:1000)而非sta_info(1:1000),并不是因为我习惯了C语言里的数组默认下标从0开始。实际上, ...

你好,谢谢。
首先这样和直接定义一个较大的数组,然后依次把数据/字符串写进去效果应该是一样的吧,就是有多少数据写多少空间的,剩下的还是空的,然后对其进行排序?这个直接把总共有多少数据计算出来,然后对这1-n个数据进行排序后面的没有影响吗?还是把这1-n个数据提取出来放到一个新的数组里面?
4楼2015-05-27 19:23:58
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
普通表情 高级回复 (可上传附件)
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[基金申请] 不应该看fileCode +7 且听虎啸 2026-08-12 9/450 2026-08-13 14:27 by flydreamws
[基金申请] FileCode能看出啥? +8 要乐观耀哥 2026-08-10 26/1300 2026-08-13 12:01 by Tide man
[基金申请] 重要来源:本周末出结果 +9 瞬息宇宙 2026-08-12 9/450 2026-08-13 10:12 by Vivilian
[基金申请] 我的国基提前知道中了,可是同事的操作让我实在接受不了,怎么会有这样的人 +9 家与远方 2026-08-10 14/700 2026-08-13 09:41 by 臭臭不臭01
[基金申请] 2019年青年基金涵评意见,大家看看几个A,几个B? +11 Tide man 2026-08-11 11/550 2026-08-13 07:35 by 撸猫猫
[基金申请] 好奇怪的filecode +5 布布和一二 2026-08-08 6/300 2026-08-12 16:11 by 云上清扬
[基金申请] filecode +13 documentary 2026-08-10 15/750 2026-08-12 15:56 by 云上清扬
[论文投稿] 职称评审,求友友推荐见刊最快的期刊 +4 工厂打螺丝 2026-08-08 4/200 2026-08-12 09:18 by hansi2025
[基金申请] 综述论文作为代表作会不会影响评审专家的印象分? +11 yufeiwaner 2026-08-09 13/650 2026-08-12 08:17 by yufeiwaner
[基金申请] 是这周出结果还是下周出结果? +3 yuleib84 2026-08-11 3/150 2026-08-11 21:53 by jnhyjjm
[基金申请] 小木虫上这么多卖论文的,真有人买论文么?感觉没必要啊 +8 Tide man 2026-08-10 9/450 2026-08-11 20:39 by beefly
[基金申请] 什么时候出结果,有咨询渠道??? +3 Tide man 2026-08-11 3/150 2026-08-11 17:54 by kudofaye
[基金申请] 基金中了 +15 laoda193707 2026-08-06 15/750 2026-08-11 00:11 by jiafei2190
[基金申请] 确定了,国自然21号放榜 +6 布布和一二 2026-08-10 7/350 2026-08-10 19:15 by 2000zf36392
[基金申请] 关于代码变化问题,想知道的进来 +17 且听虎啸 2026-08-07 24/1200 2026-08-10 18:35 by zhangduo2008
[基金申请] 国自然结果 +4 Vierhys 2026-08-10 8/400 2026-08-10 15:06 by Vierhys
[基金申请] 这样的filecode谁见过 +11 布布和一二 2026-08-08 22/1100 2026-08-10 11:10 by wmfsnow
[基金申请] filecode与中标关系的预测 +5 布布和一二 2026-08-07 5/250 2026-08-09 16:15 by 袁向阳007
[基金申请] 固定端突然变了,今天 +6 archvillain 2026-08-06 10/500 2026-08-07 16:03 by 医学老男孩
[基金申请] filecode变化情况 +6 布布和一二 2026-08-07 22/1100 2026-08-07 14:45 by 且听虎啸
信息提示
请填处理意见