如何获取我的python函数以将数组用作输入?

时间:2019-06-06 15:16:12

标签: python arrays function

我有这个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 : intlat : float

我该如何进行调整,以便lat使用数组latarray中的值来创建具有相同.shape(883,1368)的新数组?

3 个答案:

答案 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