2016-12-16 87 views
0

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

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 

回答

0

下面的代码做适当的整形,但你应该通过探查运行您的程序来衡量性能。您的优化标志有多积极?

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])