【发布时间】:2012-07-25 17:44:05
【问题描述】:
考虑以下几点:
program main
integer, parameter :: n=10, m=20
integer ints(n,m)
real floats(m,n)
!... initialize ints
! ...
floats=transpose(ints)
!... do stuff with floats
end
查看 gfortran 的文档,transpose(ints) 似乎将返回一个整数数组,然后将其转换为实数。在此操作中,编译器 (gfortran) 为转置后的数组创建了一个临时数组,这似乎很浪费(使用 gfortran -O3 -Warray-temporaries -o test test.f90 编译)。另请注意,如果您将 real 数组“浮动”更改为 integer 数组,警告就会消失。
有没有办法在不生成临时数组的情况下做到这一点(对于任意类型)? (我也试过floats(:,:)=transpose(ints),因为我在某处读到它很重要......)。它与其他编译器的行为方式相同吗?
【问题讨论】: