gpt4 book ai didi

fortran - 调整循环生成的数组大小

转载 作者:行者123 更新时间:2023-12-04 12:51:43 27 4
gpt4 key购买 nike

让我们有一个数组 A(:,:)

Real, Allocatable:: A(:,:), B(:) 
Integer, Allocatable:: rowin(:)
Integer:: m,j,k, nl

Allocate(A(max1,max2))

由 m,j,k 上的几个循环定义

 nl = 0

A(rowin(m)+j,k) = ...

现在我想选择 A(:,:) 的子集,使它们的值为负,并将它们存储到数组 B(:) 中,但长度未知,即

if(A(rowin(m)+j,k).lt.0.d0) then
nl = nl + 1
B(nl) = A(rowin(m)+j,k)
end if

因为 max1 和 max2 是非常大的数字,我不想分配长度为 max1*max2 的 B(:),而是恰好分配 A(:,:) 包含负值的长度。另外,我不想再次对 m、j 和 k 进行复杂的循环。谢谢。

最佳答案

这很简单:

b = pack(a,a<0.0)

会将 a 的负元素打包到 rank-1 数组 b 中。使用最近的编译器,b 将在分配期间自动分配到正确的大小。

(最新的 Fortran 标准在 pack 函数的文档中给出了非常相似的操作示例。)

关于fortran - 调整循环生成的数组大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35214847/

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