python - 使用 for 循环和列表进行值提取
问题描述
我有一个代码,可以从总共 8 个站的卫星观测 nc 文件中提取数据。
from netCDF4 import Dataset
import numpy as np
import pandas as pd
data = Dataset('rainfall.nc', 'r')
dims = data.dimensions
ndims = len(dims)
vars = data.variables
nvars = len(vars)
attrs = data.ncattrs
lon = data.variables['lon'][:]
lat = data.variables['lat'][:]
所需台站的经纬度如下:
A=(46.28, 38.08)
B=(49.62, 37.32)
C=(51.50, 36.65)
D=(47.00, 35.33)
E=(51.32, 35.68)
F=(51.67, 32.62)
G=(51.55, 30.68)
H=(52.60, 29.53)
对于每个站(从 A 到 H),我必须执行以下 6 行编码任务才能获得数据(以下代码是“A”站的示例),在哪里??是所需的变量,例如降雨量等:
long_location,lat_location = (A) "= (46.28, 38.08)"
sq_dist_lat = (lat - lat_location)**2
sq_dist_lon = (lon - long_location)**2
min_index_lat = sq_dist_lat.argmin()
min_index_lon = sq_dist_lon.argmin()
variable = data.variables['rainfall'][min_index_lat, min_index_lon]
我创建了一个列表如下:
locations = [A, B, C, D, E, F, G, H]
但是,我需要一个“for”循环来执行上面提到的所有 8 个站的 6 行任务,并将数据打印为具有 8 列的数组。如果有人可以帮助我,我将不胜感激
解决方案
我遇到了一个错误'float' object has no attribute 'argmin'
,我猜你想找到点(AH)到给定点(lat
和lon
)之间的最近点,如果不是 - 那么请澄清输入和预期输出。
为此,您可以使用这段代码:
import numpy as np
A=(46.28, 38.08)
B=(49.62, 37.32)
C=(51.50, 36.65)
D=(47.00, 35.33)
E=(51.32, 35.68)
F=(51.67, 32.62)
G=(51.55, 30.68)
H=(52.60, 29.53)
locations = [A, B, C, D, E, F, G, H]
lon = 51
lat = 35
closest_point = locations[np.argmin([np.sqrt((item[0]-lon)**2 + (item[1]-lat)**2) for item in locations])]
print(closest_point)
输出:
(51.32, 35.68)
如果这不是您想要的,请以我的回答为提示