fortran - Fortran 90 函数
问题描述
在 Fortran 上,python 中使用的“i in range”的等效函数是什么(在 a 和 b 之间创建一个数字序列)?与“附加”相同(将传递的对象附加到现有列表中)
如何用一些不应该满的 boxex 创建一个数组?
谢谢!
解决方案
“i in range”的等效函数
隐含的 do-loop 是您正在寻找的
(f(i), i=1, n)
与“追加”相同(将传递的 obj 追加到现有列表中)
python中可以动态增长的列表在fortran中没有直接比较。
正如@IanBush 指出的那样:有一种替代方法 using但请注意,它每次都会重新allocatable
分配并复制整个数组
integer, allocatable :: arr(:)
arr = [1, 2]
arr = [arr, 3]
您可能想考虑实现自己的派生类型,它可以成倍增长。类似于c++ 中的 std::vector 的东西。
如何用一些不应该满的 boxex 创建一个数组?
评论给出的详细说明:
在这个网格中有一些不应该填充的黑框,我不知道该怎么做,还有一些带有两个数字的框,我也不知道怎么做。
您可以为此定义布尔数组(我假设您并不真正关心内存消耗)
program main
implicit none
integer :: n, i, j
integer, allocatable :: grid(:,:,:)
logical, allocatable :: unused(:,:), double(:,:)
n = 10
allocate (grid(2,n,n))
allocate (unused(n,n), source=.true.)
allocate (double(n,n), source=.false.)
! set values
unused(1, 2) = .false.
do i = 1, n
do j = 1, n
if (unused(i,j)) cycle
if (double(i,j)) then
! use values grid(1,i,j), grid(2,i,j)
else
! only use value grid(1,i,j)
end if
end do
end do
end program
推荐阅读
- powershell - Powershell:文件复制:如果文件名包含特殊字符,则无法复制
- php - XAMPP 中禁止访问
- angular - 如何创建多个拖放区域并在它们之间传递变量
- angular - 使用Angular在Ionic 5中路由用户时如何刷新页面
- google-chrome - 我是否需要先发布 chrome 扩展才能测试许可证?
- python - 如何在 python unittest 中模拟未在本地安装的库?
- postgresql - 安装后无法连接到 PostgreSQL 12 服务器
- java - 更新 Kotlin 后主要活动未启动
- button - Xamarin Forms Transalted 按钮单击
- common-lisp - Stack Overflow on lisp 更改列表中的 2 个元素