与python numpy.minimum等效的Fortran
我试图用fortran重新编写一些python代码,特别是这行代码与python numpy.minimum等效的Fortran,python,fortran,Python,Fortran,我试图用fortran重新编写一些python代码,特别是这行代码 separation[a,:]=和(np.最小值(1-距离,距离)**2) 重要的部分是使用np.minimum来获取二维数组的元素最小值。距离是由N个坐标(x,y,z)组成的(3,N)数组。我在fortran中找不到类似的函数,因此我使用以下方法编写了自己的函数: do b = 1, N temp = 0.0 do c = 1, 3 if ((1 - distances(c, b)) .LE.
separation[a,:]=和(np.最小值(1-距离,距离)**2)
重要的部分是使用np.minimum来获取二维数组的元素最小值。距离是由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)
separation[a,:]=sum(np.where(1-距离几乎相同。大多数fortran内部函数在数组上按组件操作(假设您至少有fortran 95)
0.05 0.25 0.41 0.13
注意fortran的sum
默认情况下会对整个数组求和。几乎相同。大多数fortran内部函数在数组上按组件操作(假设您至少有fortran 95)
0.05 0.25 0.41 0.13
注意fortran的sum
默认情况下会对整个数组求和。谢谢!真不敢相信它这么简单。谢谢!真不敢相信它这么简单。
real a(2,4),b(4)
a=reshape([.1,.2,.3,.4,.5,.6,.7,.8],shape(a))
b=sum(min(1-a,a)**2,1)
write(*,'(4f5.2)')b
end