我发现了关于export class App extends Component {
componentDidMount() {
this.props.loadAppAction();
}
...
}
和MINVAL
的讨论:
Finding [index of] the minimal value in array which satisfies a condition in Fortran
我想知道MINLOC
和MINLOC
是否能够在有多个最小值/最大值的情况下返回一个数组。
另外,一旦我获得索引数组,我如何在这些索引上循环最好?
答案 0 :(得分:2)
他们可能不会。对于minloc
,结果描述为(F2008,13.7.114):
如果只有一个元素具有最小值,则返回该元素的下标。否则,如果多个元素具有最小值且
BACK
不存在或者值为false,则返回其下标的元素是第一个以数组元素顺序获取的元素。如果BACK
的值为true,则返回其下标的元素是最后一个以元素顺序排列的元素。
maxloc
类似。
当然,它们确实有数组结果,但是rank-1数组的元素给出了单个元素的索引。较高等级的数组不会反映更多返回的元素,而是沿着维度减少(使用dim=
说明符)。
也就是说,如果你在知道极值的值时寻找全局极值(在公差范围内)的多个匹配,这只是在整个数组中寻找相等的值(在容差范围内)。寻找局部极值是一个非常不同但有趣的问题。
即使在第一种情况下,也有更好的算法不能使用minloc
,maxloc
。
答案 1 :(得分:1)
对一些问题的答案,特别是这一点
此外,一旦我获得了索引数组,我如何最好地循环 这些指数?
通常你不需要索引数组,你只需要记住Fortran(现在)是一种数组编程语言并且你写了
where(myarray==minval(myarray)) myarray = fun(myarray)
如果这还不够,您还可以使用where
构造,该构造可以包含任意数量的elsewhere
子句。显然,如果你想要一个宽容的等式,你可以根据需要调整掩码表达式。
如果您要重复使用where(myarray==minval(myarray))
并且关注重复评估掩码表达式,您只需预先计算它,例如
mymask = myarray==minval(myarray)
然后一次又一次地使用它
where (mymask) ...
答案 2 :(得分:1)
确定。我想与@francescalus选项一起去
我的代码目前看起来像这样:
DO k=k1,k2
DO j=j1,j1
DO ii=i1,i2
DO iSpec =1,nSpec
density_spec(iSpec, ii, j, k) = Q(1, ii, j, k)
min_dens(iSpec) = MINVAL(density_spec)
ENDDO
ENDDO
ENDDO
ENDDO
DO iSpec=1,nSpec
DO k=k1,k2
DO j=j1,j2
DO ii=i1,i2
IF( density_spec(iSpec, ii, j, k)==min_dens(iSpec)) THEN
chem_time1(iSpec) = MIN(chem_time1(iSpec), density_spec(iSpec, ii, j, k)/(omgdot_spec(iSpec, ii, j, k)+1.E-16))
ENDIF
ENDDO
ENDDO
ENDDO
ENDDO
目前,我在“min_dens()= MINVAL()”行收到“浮动无效”。你知道为什么吗?此外,不确定如何添加公差。