繁体   English   中英

在Fortran90中重塑

[英]Reshape in Fortran90

我需要在Fortran中将尺寸为3 * 8的2D矩阵(A)重塑为尺寸为(6 * 4)的矩阵(B),如下例所示。

Matrix A 

1 2 1 2 1 2 1 2
5 6 5 6 5 6 5 6
7 8 7 8 7 8 7 8

Matrix B                       
    1 1 1 1
    2 2 2 2
    5 5 5 5
    6 6 6 6
    7 7 7 7
    8 8 8 8

我尝试使用循环进行以下操作,但对于大型矩阵而言似乎很慢。 我在考虑是否可以使用Fortran 90中的RESHAPE功能进行这种重塑。

        counter=1
        do i=1,size(A,2),2
            seq1(counter)=i
            counter=1+counter
        end do

        counter=1
        do i=2,size(A,2),2
          seq2(counter)=i
          counter=1+counter
        end do

        counter=1
        do i=1,size(A,1)*2,2
          S_1(counter)=i
          counter=1+counter
        end do

        counter=1
        do i=2,size(A,1)*2,2
          S_2(counter)=i
          counter=1+counter
        end do

        Do i=1,size(A,1)
          B(S_1(i),:)=A(i,seq1)
          B(S_2(i),:)=A(i,seq2)
        END DO

下面的代码进行了适当的重塑,但是您应该通过探查器运行程序以评估性能。 您的优化标志有多积极?

  B(1:2,:) = reshape(source=A(1,:), shape=[2,4])
  B(3:4,:) = reshape(source=A(2,:), shape=[2,4])
  B(5:6,:) = reshape(source=A(3,:), shape=[2,4])

并扭转转变,

  A(1,:) = reshape(source=B(1:2,:), shape=[8])
  A(2,:) = reshape(source=B(3:4,:), shape=[8])
  A(3,:) = reshape(source=B(5:6,:), shape=[8])

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM