【问题标题】:Using a vector to index a multidimensional Fortran array使用向量索引多维 Fortran 数组
【发布时间】:2012-08-17 11:52:42
【问题描述】:

在现代 Fortran 中是否可以使用向量来索引多维数组?也就是说,给定,比如说,

integer, dimension(3) :: index = [4,6,9]
double precision, dimension(10,10,10) :: data

有没有比写data(index(1), index(2), index(3)) 更好(更通用)的方式来访问data(4,6,9)?最好不必对 data 数组的等级进行硬编码。

(天真地我想写 data(index) 但这实际上意味着不同的东西 - 子集“聚集” - 要求 data 本身是一个排名第一的数组。)

值得一提的是,这与multidimensional index by array of indices in JavaScript 本质上是相同的问题,但在Fortran 中。不幸的是,那里的聪明答案不适用于预定义的数组等级。

【问题讨论】:

    标签: arrays fortran


    【解决方案1】:

    没有。我能想到的所有变通方法都是骇人听闻的 hack,你最好编写一个函数以将 dataindex 作为参数并吐出你想要的元素。

    但是,您可能能够使用现代 Fortran 的数组等级重新映射功能来做完全相反的事情,这可能会满足您对数组等级进行快速和宽松的要求。

    鉴于声明

    double precision, dimension(1000), target :: data
    

    你可以定义一个 rank-3 指针

    double precision, pointer :: index_3d(:,:,:)
    

    然后这样设置:

    index_3d(1:10,1:10,1:10) => data
    

    你好,你现在可以在data 中使用 rank-3 和 rank-1 索引,这与你想要做的很接近。我还没有在愤怒中使用它,但是几个简单的测试没有发现任何严重的问题。

    【讨论】:

    • @VladimirF:好吧,我现在可以做data(sum([((index(i)-1)*10**(i-1), i=1, size(index))]) + 1)...如果我真的想的话!
    • @HighPerformanceMark:确认没有一种很好的本地方法可以做到这一点,以及解决它的两种明智的方法......谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-20
    • 2018-01-22
    • 1970-01-01
    • 1970-01-01
    • 2015-11-04
    • 1970-01-01
    相关资源
    最近更新 更多