vvt 发表于 2021-12-9 12:24 您好,我还有一个问题,在这个地方我得到了三维K数组后,应该为K(2,999,999)或K(2,x,y)。然后我需要调用x,y数值相同时的k(1,x,y)与k(2,x,y)的数值组成一个新的二元数组,进行后续的计算,在整个过程中需要对所有的x,y值的组合得到的新数组进行计算。 那这个地方在程序实现的时候,我是可以再次使用一个forall来实现双循环得到新数组吗?可不可以我在一开始使用forall循环对赋值k数组的时候就调用每一个k数组,如k(:,x,y),应该就对应上面的二元数组,进行后续的计算,最后得到每一个新数组对应的结果后结束循环呢。谢谢 |
1. 是的,三个维度的上限。(下限默认为1) 2. size(k,2) 是 k 数组第二个维度的大小。(上限-下线+1) 同理,size(k,3) 是 k 数组第三个维度的大小。 3. write(*,*) k 即可输出所有的 k 值。单独输出某一个,用 k(某个,某个,某个) |
胡文刚 发表于 2021-11-26 22:28 您好,我刚刚上手Fortran,这个地方可能还有几个问题需要询问一下, 1.allocate分配动态数组的时候,这个地方数组的三个参数是什么意思呢,是k数组的三个维数的上限值吗。 2.这个地方的size(k,2)和size(k,3)是什么意思呢,对应k的行数,或者列数? 3.如果我需要单独输出每一个K值需要怎么输出呢,如print *,'',k(2,1,3),这样的吗? 感谢 |
胡文刚 发表于 2021-11-26 22:28 是的是的,十分感谢您了 |
本帖最后由 胡文刚 于 2021-11-26 22:44 编辑 这样是你想要的吗? [Fortran] 纯文本查看 复制代码 Program workfile Implicit None integer , parameter :: n = 1000 real , parameter :: PI = acos(-1.0) , a = 1.42e-10 real :: b1(2), b2(2) real , allocatable :: k(:,:,:) integer :: x , y allocate(k(2,n-1,n-1)) b1 = [ 2*PI/a*sqrt(3.0) , 2*PI/a ] b2 = [ 2*PI/a*sqrt(3.0) ,-2*PI/a ] Forall(x=1:size(k,2) , y=1:size(k,3)) k(:,x,y) = (b1*x+b2*y)/n End Forall End Program workfile |
necrohan 发表于 2021-11-26 08:22 好的,那这个地方就相当于如果需要两个整数相除得到的是一个浮点数,需要给整数乘上一个浮点数是吧 另外 我不是很清楚,这个地方b1,b2都是具有两个元素的数组,但是我通过分割计算后,需要得到的k也要是一个两个元素的数组,但是怎么通过把这个k(2)和分割的指标x,y联系起来呢,取地址吗? (其实我本来想着,因为下x,y=1,999嘛,b1,2又是两个元素的数组,而如果这样的话,k会是一个1998*999的矩阵吗,但是这样的话,每一个k值对应的是1,3,5...的奇数,似乎不太好定义k矩阵的指标) 大佬看能有什么办法嘛 |
捐赠本站|Archiver|关于我们 About Us|小黑屋|Fcode ( 京ICP备18005632-2号 )
GMT+8, 2024-12-25 21:07