我正在尝试用fortran重新编写一些python代码,特别是行
separation[a, :] = sum(np.minimum(1 - distances, distances) ** 2)
最重要的是使用np.最小值取两个多维数组的元素最小值。距离是由N个坐标(x,y,z)组成的(3,N)数组。我在fortran中找不到类似的函数,所以我用以下方法编写了自己的函数:
do b = 1, N
temp = 0.0
do c = 1, 3
if ((1 - distances(c, b)) .LE. distances(c, b)) then
temp = temp + (1 - distances(c, b)) ** 2
else
temp = temp + (distances(c, b)) ** 2
end if
end do
separation(a, b) = temp
end do
不出所料,这段代码是非常缓慢的,我不是很有经验的fortran,所以任何建议,以改善这段代码或建议一个替代方法将不胜感激。你知道吗
我认为where语句可能会有所帮助,因为下面的python代码是有效的
separation[a, :] = sum(np.where(1 - distances <= distances, (1 - distances), distances) ** 2)
但是,虽然fortran有where语句,但它们的工作方式似乎与python的不同,在这里似乎没有太多用处。你知道吗
几乎是一样的。大多数fortran内部函数在数组上按组件操作(假设您至少有fortran95)
注意fortran的
sum
默认情况下会对整个数组求和。你知道吗相关问题 更多 >
编程相关推荐