如何让python函数使用数组作为输入?

2024-09-30 09:23:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个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)的新数组?你知道吗


Tags: 函数httpsreturnnp来源数组gistlat
3条回答

一份清单怎么样?那么你就不需要改变你的功能了:

[daylength(dayOfYear, lat) for lat in latarray]
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])

您可以在数组中使用向量化函数,它将在数组中的每个元素中应用您的函数。请参见下面的演示:

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

相关问题 更多 >

    热门问题