我有这个python函数,它根据纬度和一年中的一天来计算日长(来源:https://gist.github.com/anttilipp/ed3ab35258c7636d87de6499475301ce)。
def daylength(dayOfYear, lat):
latInRad = np.deg2rad(lat)
declinationOfEarth = 23.45*np.sin(np.deg2rad(360.0*(283.0+dayOfYear)/365.0))
if -np.tan(latInRad) * np.tan(np.deg2rad(declinationOfEarth)) <= -1.0:
return 24.0
elif -np.tan(latInRad) * np.tan(np.deg2rad(declinationOfEarth)) >= 1.0:
return 0.0
else:
hourAngle = np.rad2deg(np.arccos(-np.tan(latInRad) * np.tan(np.deg2rad(declinationOfEarth))))
return 2.0*hourAngle/15.0
其中dayOfYear : int
和lat : float
我该如何进行调整,以便lat
使用数组latarray
中的值来创建具有相同.shape(883,1368)
的新数组?
答案 0 :(得分:1)
列表理解如何?然后,您无需更改功能:
[daylength(dayOfYear, lat) for lat in latarray]
答案 1 :(得分:0)
value=np.zeros((883,1368))
for i in range(np.size(latarray,0)):
for j in range(np.size(latarray,1)):
value[i,j] = daylength(DayOfYear, latarray[i,j])
答案 2 :(得分:0)
您可以在数组中使用向量化函数,它将函数应用到数组latarray中的每个元素中。参见下面的演示:
import numpy as np
vfunc = np.vectorize(daylength)
dayOfYear = 100
latarray = np.array([[10, 20, 30], [3, 6, 9]])
vfunc(dayOfYear, latarray)
Result:
array([[12.16899985, 12.34893859, 12.5537987 ],
[12.05022628, 12.10073141, 12.1518005 ]])
参考:https://docs.scipy.org/doc/numpy/reference/generated/numpy.vectorize.html