我需要在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我尝试了下面的循环,但对于大型矩阵来说似乎非常慢。我在想,在Fortran90中是否可以使用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发布于 2016-12-17 04:50:51
下面的代码进行了适当的调整,但您应该通过探查器运行您的程序来评估性能。你的优化标志有多积极?
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])https://stackoverflow.com/questions/41190463
复制相似问题