Fortran 95 数组中具有一维变量的二维数组

2024-03-03

我想在代码中将一些内容存储在二维数组中,然后想扫描该数组。有N_{1}行(第一个索引的数量,比如说i)在数组中。然而,对于给定值i,数量j尽管我知道最大可能值,但值不是固定的j(说它是N_{2}).

我当然可以创建大小的数组(N_{1},N_{2})来存储我的数据。然而,这似乎浪费空间,因为我的N_{2}值波动很大,数组中的元素总数也很大。可以创建一个可以有不同数量的二维数组j值取决于i价值?或者,即使我可以通过单个 Fortran 命令创建多对一维数组并正确分配它们,这对我来说也是可以的。


正如你建议的那样answer https://stackoverflow.com/a/18316726/3157076另一个问题,看看参差不齐的数组可能是您想要的,我将简要提及该答案的可用性扩展(Doug Lipinski 在评论中暗示)。

对于基本类型,表示可变长度维度,由 High Performance Mark 给出

type :: vector
    integer, dimension(:), allocatable :: elements
end type vector

以及这些数组的类型

type :: ragged_array
    type(vector), dimension(:), allocatable :: vectors
end type ragged_array

一个有分配步骤

type(ragged_array) :: ragarr

allocate(ragarr%vectors(5))
allocate(ragarr%vectors(1)%elements(3))
! etc.

[或者,人们可能会想要拥有一系列type(vector).]

对于可用性方面,可以创建一个结构构造函数来执行大量分配,甚至依赖于可变长度组件的自动分配。

在后一种情况下,如果在创建时知道值(而不仅仅是范围),则这是有意义的。

allocate(ragarr%vectors(5))
ragarr%vectors(1)%elements = [1, 6, 13]
! etc.

对于前一种情况,类似

module ragged

  implicit none

  type :: vector
      integer, dimension(:), allocatable :: elements
  end type vector

  type :: ragged_array
      type(vector), dimension(:), allocatable :: vectors
  end type ragged_array

  interface ragged_array
      module procedure ragged_constructor
  end interface ragged_array

contains

  function ragged_constructor(sizes) result(ra)
      integer, intent(in) :: sizes(:)
      type(ragged_array) ra
      integer i

      allocate(ra%vectors(SIZE(sizes)))
      do i=1,SIZE(sizes)
          allocate(ra%vectors(i)%elements(sizes(i)))
      end do

  end function ragged_constructor

end module ragged

program test

    use ragged
    implicit none

    type(ragged_array) :: ra

    ra = ragged_array([3,4,6,1,12])

end program
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Fortran 95 数组中具有一维变量的二维数组 的相关文章

  • 如何在 Fortran 中获取未知长度的命令行参数?

    我想从用于运行程序的命令行读取一些文本字符串 我正在使用内部子例程GET COMMAND ARGUMENT在一个基本上是这样的程序中 program test character len 100 argument call GET COMM
  • C++ 中的按元素运算

    是否有一个预先存在的库可以让我创建具有以下属性的类似数组的对象 运行时大小规范 在实例时选择 之后不会增长或缩小 运算符重载以执行元素明智的操作 即c a b将产生一个向量c with c i a i b i 对全部i 类似地对于 etc
  • 具有重载赋值的嵌套派生类型

    我有一个派生类型 wrapper 包含其他派生类型 over 对于后者 赋值运算符已被重载 由于派生类型的分配按默认组件方式发生 因此我希望分配两个实例wrapper将调用重载分配over在某一点 然而 使用下面的程序 情况似乎并非如此 仅
  • ctags 和 Fortran 的接口

    我想知道如何让 ctags 使用 Fortran 中的接口 例如 INTERFACE SOME ROUTINE MODULE SOME ROUTINE A MODULE SOME ROUTINE B END SOME ROUTINE 因此
  • 与 gfortran 和 gcc 静态链接的混合语言

    我有一些用 C 和 Fortran 编写的代码 我想将其编译成静态链接的可执行文件 如果我动态编译代码 使用 fno underscoringgfortran 的选项 一切正常 但是 我想将其链接到 so文件中 静态链接大部分需要的库 然后
  • Fortran 接受来自 C 的字符串(?)

    我觉得这应该是一个简单的问题 但我无法让它发挥作用 我有一些 Fortran 代码 需要如下输入 SUBROUTINE TRACE X Y NAME XX YY EXTERNAL NAME CALL NAME X Y XX YY 我正在尝试
  • Fortran + OpenMP + 多态性:到底不支持什么?

    我知道 OpenMP 4 5 标准表示 Fortran 中不支持 多态实体 这到底是什么意思 这是否仅排除对具有 PASS 属性的类型绑定过程的调用 但我仍然可以以其他方式使用具有类型绑定过程的用户定义类型的实例 例如访问其组件 此限制是否
  • 将分配给 Fortran 数组的 C_PTR 传递给 C

    我在访问 C 中的数组时遇到段错误 该数组在下面的 Fortran 文件中分配 有一些调试问题 例如文件写入没有写入任何有意义的内容 并且我初始化了一个变量i我从来没有用过 但是 我发现了以下内容 未初始化i 但仍然声明 没有段错误 未在
  • C++ 和 Fortran 混合链接问题

    我在网上做了一些搜索 但我找不到如何从 Linux 编译简单的 C 和 Fortran 代码 我需要让它变得复杂 但我只需要知道如何从一个简单的例子开始 我的C 代码是这样的 include
  • 使用 MPI 派生数据类型

    我正在学习 Fortran 中的 BCASTing 数据类型 并且有一个代码可以从终端获取两个值并将它们显示在每个进程上 对于整数 整数和整数 实数类型的组合 value1 value2 这是有效的 但是对于整数 实数 8 的组合 它会失败
  • 在 fortran 中生成序列数组

    Fortran中是否有一个内在函数可以生成一个包含从a到b的数字序列的数组 类似于python的range gt gt gt range 1 5 1 2 3 4 gt gt gt range 6 10 6 7 8 9 不 没有 但是 您可以
  • 大多数编译器都会优化 MATMUL(TRANSPOSE(A),B) 吗?

    In a Fortran program I need to compute several expressions like M v MT v MT M M MT etc Here M and v are 2D and 1D arrays
  • 如何为 Fortran 95+ 模块库提供显式接口,并隐藏实现

    我正在使用 gfortran 的 95 扩展 我有一个实用程序模块库 我想链接到其他项目 即作为库或共享对象 dll 但是 在 Fortran 中 我不明白如何在不维护模块接口的两个副本的情况下将接口与 Fortran 中的实现分离 在 C
  • 在 Fortran 90 中,是否必须事先声明数组维度?

    是否有必要在任何其他代码之前声明数组维度 例如 我编写了以下简化的示例代码 PROGRAM mytest IMPLICIT NONE INTEGER i j k mysum Let array c be a k by k 2 array D
  • 提高由整数商定义的变量的精度

    假设我有以下程序 program derp implicit none integer parameter ikind selected real kind 18 real kind ikind a 2 0 3 0 print a end
  • 在 Fortran 中读取行数已知但每行条目数未知的数据文件

    如何读取包含已知行数但每行中的条目数未知的数据文件 例如如果我的数据文件包含类似的内容 1 3 4 5 6 7 8 9 1 3 5 6 4 5 6 7 8 3 5 6 7 8 4 5 7 8 即三行 但每行中的数据未知 有一次我需要来自一行
  • 使用 Fortran (CLFORTRAN) 在 OpenCL 中将两个选项作为参数传递

    当我的主机程序采用 C 语言时 我可以传递两个选项作为 OpenCL 函数的参数 例如 我可以通过两个 标志到clCreateBuffer像这样的函数 clCreateBuffer context CL MEM READ ONLY CL M
  • OpenMP 因大型数组而崩溃

    我正在使用 Fortran 和 OpenMP 但当我尝试在存在大型数组时使用 OpenMP 并行化循环时 我不断遇到问题 例如 以下代码 PROGRAM main IMPLICIT NONE INTEGER PARAMETER NUMLOO
  • 使用命令行查找数据文件的行数

    有一种常规方法 逐行读取并检查iostat每次读数时都会达到非零或负值 不过 我想打电话system command 例行公事和 使用wc l命令来计算数量 然后想要分配要放置数据的数组的维度 例如 我以两种方式打印行数 Program T
  • 编译错误:无法打开模块文件

    我有这个代码 PROGRAM xfit driver for routine fit USE nrtype USE nrutil USE nr USE ran state ONLY ran seed IMPLICIT NONE INTEGE

随机推荐

  • Android Studio 新项目文件大小太大

    我刚刚在 Android Studio 2 2 3 中创建了一个新的 android 项目 只有一个空的 Activity 但它仍然在设备上使用了 4 11 MB 我认为这个空间很大 因为它确实包含一个空的 Activity 为什么它占用这
  • 如何禁用 Firefox 开发者版中新的 JSON 查看器/阅读器?

    火狐开发者版 44现在有一个内置的 JSON 查看器 https developer mozilla org en US docs Tools JSON viewer 这是一个很好的举动 但我非常喜欢我使用的第三方 JSON 查看器的可读性
  • 如何使用 PostSharp 属性注入属性?

    如何编写 PostSharp 方面以将属性应用于类 我正在考虑的场景是一个 WCF 实体 或域对象 需要用DataContract属性 它还应该有一个Namespace财产 像这样 using System Runtime Serializ
  • 使用 PHPUnit 测试 PHP 标头

    我正在尝试使用 PHPunit 来测试输出一些自定义标头的类 问题是在我的机器上
  • Android Studio:根据构建类型切换 URL? (用于调试/发布中的测试)

    我一直在阅读一些有关变体和构建类型的内容 我不知道我是否理解正确 但我想存储一个用于 locahost 测试 的 URL 和一个用于生产的 URL 互联网上的实时站点 我需要根据哪种构建类型来切换它们 这是正确的方法吗 或者还有其他选择吗
  • Swift switch 语句中使用 `let` 时出现编译错误

    在 Swift 中 您可以使用范围运算符获取数组的切片 如下所示 let list String first middle last let cdr list 1 list endIndex assert cdr middle last 我
  • 如何从 JSON 对象流中获取第一个元素?

    Example name bar thing true new key 0 name baz thing false new key 0 如果我跑 name我得到的输出为 bar baz 我想要的只是bar 您可以使用first 1 htt
  • 带有文档的 Maven 发布

    我正在尝试将文档包含到 Maven 发布中 该出版物本身运作良好 我还可以使用以下设置将源和 javadoc 发布到 gitlab 包 我可以下载并打开包含这些类的注释 文档的javadoc jar 和sources jar 然而 当我将该
  • 如何使用 FXML 在 JavaFX 中动态创建选项卡?

    如何使用 JavaFX FXML 创建新选项卡 我已经在 FXML 中创建了一个选项卡 但我想单击一个按钮来显示一个新选项卡 这是我的 FXML
  • MySQL如何更改innodb日志文件大小

    根据mysql文档 Docs http dev mysql com doc refman 5 5 en innodb data log reconfiguration html 为了在步骤 4中更改innodb log file size
  • 一个普通的类可以实现多个接口吗?

    我知道接口之间的多重继承是可能的 例如 public interface C extends A B Where A B and C are Interfaces 但是是否可以让一个常规类继承多个接口 如下所示 public class A
  • 有什么方法可以区分未设置的属性和设置为未定义的属性吗? [复制]

    这个问题在这里已经有答案了 说我有对象testObject a undefined 如果我那么console log testObject a 我变得不确定 但如果我也会发生同样的情况console log testObject b 它不存
  • Excel - 多列求和

    如果同一行中的其他单元格符合预定义的条件 我需要对几列的值求和 仅 3 列的工作公式如下 SUM SUMIFS Sheet1 W W Sheet1 B B Sales Sheet1 C C gt 4 SUMIFS Sheet1 X X Sh
  • Plupload - 仅限一个文件

    我在 plupload API 文档中没有看到有关将上传文件数量限制为任意数量 甚至是 1 的选项 博士失败了 或功能失败 如果它不存在 如果有人需要它 我会努力实现这一点 这是一个功能失败 我围绕 jQuery API 做了一个包装器 这
  • GNU Awk 4.2 中 FS = " " 的行为是什么?

    The first week of October Arnold Robbins announced Beta release of gawk 4 2 0 now available in the GNU announce bug gawk
  • Rails,如何在绝对最低级别访问原始请求数据?

    铁轨什么时候出request请求生命周期中最早可用的对象 本质上 请求何时首次作为请求对象可用 以及在哪个对象中 ActionDispatch 您可以从以下位置访问请求参数吗Tester Application 如果是这样 怎么办 如果没有
  • 在 docker 容器中导入 keycloak 的领域配置时出错

    我通过以下命令在 docker 上部署了 keycloak docker run e KEYCLOAK ADMIN admin e KEYCLOAK ADMIN PASSWORD admin p 8080 8080 quay io keyc
  • ReferenceError:Rx 未定义

    我刚刚开始学习 Angular2 我正在尝试使用 Angular2 做 RxJ 示例 如果有人帮助我 我将不胜感激 RxJs 代码 var obs Rx Observable interval 500 take 5 do i gt cons
  • Linq 到对象

    我有两个来自不同服务器的数据库 我无法链接数据库 从数据库中检索数据如下 DB1 Client ID Engagement ID 启用说明 600 10 真实公司1 600 20 虚假公司2 700 10 真实公司3 DB2 Client
  • Fortran 95 数组中具有一维变量的二维数组

    我想在代码中将一些内容存储在二维数组中 然后想扫描该数组 有N 1 行 第一个索引的数量 比如说i 在数组中 然而 对于给定值i 数量j尽管我知道最大可能值 但值不是固定的j 说它是N 2 我当然可以创建大小的数组 N 1 N 2 来存储我