1

我需要计算大约 106.000.000 个不同坐标的太阳天顶角。该坐标是指在图像被相机拍摄到飞机后投影在地球表面的图像中的像素。

我正在使用pvlib.solarposition.get_position()来计算太阳天顶角。返回的值计算正确(我将一些结果与 NOOA 网站进行了比较)但是,我需要如何计算许多坐标的太阳天顶角,python 花费了很多天(大约 5 天)来完成函数的执行.

我是如何编程的初学者,我想知道有什么方法可以加速太阳天顶角的计算。

下面找到了计算太阳天顶角的代码部分:

sol_apar_zen = [] 
    for i in range(size3):
        solar_position = np.array(pvl.solarposition.get_solarposition(Data_time_index, lat_long[i][0], lat_long[i][1]))
        sol_apar_zen.append(solar_position[0][0])
 print(len(sol_apar_zen))
4

3 回答 3

1

从技术上讲,如果您需要快速计算大型列表(阵列)的太阳天顶角,有比 PVLIB 的算法更有效的算法。例如,Roberto Grena 在 2012 年描述的那个 ( https://doi.org/10.1016/j.solener.2012.01.024 )。

我在这里找到了一个合适的实现:https : //github.com/david-salac/Fast-SZA-and-SAA-computation像 C/C++ 和 Go 一样的 Python)。

如何使用它的示例:

from sza_saa_grena import solar_zenith_and_azimuth_angle
# ...
# A random time series:
time_array = pd.date_range("2020/1/1", periods=87_600, freq="10T", tz="UTC")
sza, saa = solar_zenith_and_azimuth_angle(longitude=-0.12435,  # London longitude
                                          latitude=51.48728,   # London latitude
                                          time_utc=time_array)

该单元测试(在项目文件夹中)表明,在正常纬度范围内,错误是最小的。

于 2021-11-06T11:46:47.463 回答
0

如果您想加快此计算,您可以使用 numba 核心(如果已安装)

location.get_solarposition(
        datetimes,
        method='nrel_numba'
    )

否则,您必须基于矢量化 numpy 数组实现自己的计算。我知道这是可能的,但我不允许分享。如果您搜索,您可以找到公式spencer 1971 solar position

于 2019-08-07T17:11:22.287 回答
0

由于您的坐标代表一个网格,因此另一种选择是计算坐标子集的天顶角,然后进行二维插值以获得余数。两个方向上的 100 分之一将使您的计算时间减少 10000 倍。

于 2019-08-15T09:15:12.630 回答