gpt4 book ai didi

arrays - 从其他数组继承大小的简洁表示法?

转载 作者:行者123 更新时间:2023-12-01 23:22:28 27 4
gpt4 key购买 nike

在我的代码中,我有一个子例程,它接受一个 5 阶数组作为参数并使用一个局部变量,这是一个共享前 4 个索引的 4 阶数组。

我试图找到一种更简洁的方式来表达

中的大小声明
subroutine mysub(momentum)
complex, intent(in) :: momentum(:,:,:,:,:)
complex :: prefactor( &
& size(momentum,1), size(momentum,2), size(momentum,4) &
& size(momentum,5) )
...
end subroutine mysub

冗长的大小声明会影响可读性,尤其是当变量名比此处更长时。

如果这是 octave/matlab,我会通过编写

来预先分配 prefactor
prefactor = zeros(size(momentum)([1 2 4 5]))

Fortran 90 是否支持类似简洁的内容?我知道它可以使用预处理器宏来解决,例如

#define XSIZE2(array,a,b) SIZE(array,a), SIZE(array,b)
#define XSIZE3(array,a,b,c) SIZE(array,a), SIZE(array,b), SIZE(array,c)
#define XSIZE4(array,a,b,c,d) SIZE(array,a), SIZE(array,b), SIZE(array,c), SIZE(array,d)

但是引入这样的定义可能会损害可读性而不是帮助。

最佳答案

Fortran 2008 将 mold 说明符添加到 allocate 语句中。如果您可以访问支持此功能的编译器,则可以尝试

program main

implicit none

integer :: a(2,3,4,5,6)
integer, allocatable :: b(:,:,:,:)

print *, shape(a)

allocate(b, mold=a(:,:,:,:,1))
print *, shape(b)

end program main

此代码段适用于 Intel Fortran 2016,更新 1。

关于arrays - 从其他数组继承大小的简洁表示法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34342069/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com