【发布时间】:2018-08-26 16:38:31
【问题描述】:
我有两个数组,我想比较它们的大小并将尾随零添加到较短的数组中。
eg- 对于数组 -
y1=(/ 1,2,3 /)
y2=(/ 1,2,3,4,5 /)
最后的结果应该是——
y1=(/ 1,2,3,0,0 /)
y2=(/ 1,2,3,4,5 /)
我对 Fortran 很陌生,据我所知,可以这样完成:-
integer, allocatable :: y1(:),y2(:)
integer :: l1,l2,i
.
.
.
! some code to generate y1 and y2 here
.
.
.
l1=size(y1)
l2=size(y2)
if (l1>l2) then
do i=l2+1,l1
y2(i)=0
enddo
else if (l2>l1) then
do i=l1+1,l2
y1(i)=0
enddo
endif
我想知道是否有更好的方法来做到这一点,最好是不涉及循环的方法,因为我正在处理的实际问题可能有巨大的向量
【问题讨论】:
-
首先你必须重新分配较短的数组。可以分配吗?它是如何定义的?
-
是的,它们是可分配的。我将编辑问题。我认为变量声明是不必要的
-
请记住,在现代 Fortran 中(我认为是从 2003 年开始),您可以使用方括号数组构造函数,例如:
y1=[ 1,2,3 ],而不是更旧的(//)。 -
我不知道。谢谢你。我使用的是 f95 扩展。到现在为止我只知道这些
-
@Steve 好吧,分配的重新分配仍然是我的钱的重新分配。我在写评论时很清楚这种可能性。
标签: fortran gfortran fortran90 fortran95