【发布时间】:2016-05-14 04:25:27
【问题描述】:
我想在 Fortran90 中写一个function/subroutine,它与 MATLAB 的diff 函数相同,即它接收一个多维数组A 和一个整数dim 并计算差异在A 的相邻元素之间沿dim 指定的数组维度。
首先,应该是function 还是subroutine?为什么?
A的尺寸怎么处理?例如,如果A 的大小为(a,b,c),则如果dim 的大小为2,则输出的大小应为(a,b-1,c);和
我认为每个维度的长度都不是问题。但我不知道处理维度的数量。
编辑:
我明白了关于内在函数eoshift 的观点,也就是说,我可以eoshift 矩阵A 沿着维度dim,然后从原来的矩阵中减去它。这样做,不幸的是,输出矩阵的大小将与A 相同,而沿维度dim 的范围应该减少1。从这个意义上说,我不知道如何声明一个基于给定的形状(REAL, DIMENSION(shape(A)) :: B 不起作用)。实际上,我现在不知道如何在 function/subroutine 中声明一个未知等级的变量。
【问题讨论】:
-
应通过为 1D、2D、...7D 的特定实现创建通用接口来处理不同的维度。我会将其作为具有可分配结果的函数来执行。你需要 Fortran 2003,但 Fortran 90 已经过时了。
-
你不应该声明一个未知等级的变量,你应该使用泛型,我已经写过了。只需分配结果并使其可分配(Fortran 2003)。很简单(分配)。
-
难道不能在 Fortran 90/95 中做到这一点吗?
标签: fortran fortran90 difference