【问题标题】:How do I get my python function to use an array as input?如何让我的 python 函数使用数组作为输入?
【发布时间】:2019-06-06 15:16:12
【问题描述】:

我有这个 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) 的新数组?

【问题讨论】:

    标签: python arrays function


    【解决方案1】:

    列表理解怎么样?那么你不需要改变你的功能:

    [daylength(dayOfYear, lat) for lat in latarray]
    

    【讨论】:

    • 或地图:list(map(lambda x: daylength(dayOfYear, x), latarray))
    【解决方案2】:

    您可以在数组中使用矢量化函数,它将在数组 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

    【讨论】:

      【解决方案3】:
      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])
      

      【讨论】:

        猜你喜欢
        • 2021-03-13
        • 2021-05-20
        • 1970-01-01
        • 2020-07-03
        • 2022-01-15
        • 2011-12-29
        • 1970-01-01
        • 2010-11-03
        • 1970-01-01
        相关资源
        最近更新 更多