arrays - 在 Fortran 数组中查找第一个和最后一个正值
问题描述
我有一个整数数组。有几个值为零,至少有几个大于零。我想找到数组中第一个和最后一个正值的位置。当然,这可以通过循环来完成。但是,对于现代 Fortran 数组功能,我认为必须有更紧凑和优雅的东西。但我什么也没有。有人知道这样做的好方法吗?
解决方案
我被迫回答,因为现有的答案是巴洛克式的且不正确。我的回答是基于 FINDLOC 与 LOGICAL ARRAY= 和 VALUE= 参数一起使用的事实:
program find
integer, allocatable :: data(:)
data = [-3, 3, 2, 0, -2]
write(*,'(*(g0))') 'First Positive = ',findloc(data > 0, .TRUE.)
write(*,'(*(g0))') 'Last Positive = ',findloc(data > 0, .TRUE., BACK = .TRUE.)
write(*,*) findloc(sign(1, data), 1)
write(*,*) findloc(sign(1, data), 1, back=.true.)
end program find
来自 equation.com 的 gcc 版本 9.0.0 20181125 (experimental) (GCC) 的输出:
First Positive = 2
Last Positive = 3
2
4
请注意,如果参数 B= 为零,则 SIGN 内在函数会给出误报。
推荐阅读
- python - 如何在 pandas 数据框中将字符串转换为 clicable URL
- qt - ScrollView 内的 ColumnLayout 不会调整其内容的大小
- powershell - 用于检索附加到 EC2 实例的所有辅助私有 IP 的 AWS Powershell 命令
- jmeter - 如何在 Jmeter 中作为请求发送之前更新 Json 文件
- node.js - 部署到 Heroku 时的 React/Express App 仅响应 index.html
- php - 使用 Laravel Nova Actions 发送电子邮件
- c# - Blazor WebAssembly PWA - IFormFile FromForm 始终为空
- python - 在 Python 的类中从另一个方法访问方法时遇到问题
- linux - iwlist 和 iw dev 不一致
- r - 如何将 R 脚本放入 dockerfile?