首页 > 解决方案 > 使用 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 列的数组。如果有人可以帮助我,我将不胜感激

标签: pythonlistfor-loop

解决方案


我遇到了一个错误'float' object has no attribute 'argmin',我猜你想找到点(AH)到给定点(latlon)之间的最近点,如果不是 - 那么请澄清输入和预期输出。

为此,您可以使用这段代码:

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)

如果这不是您想要的,请以我的回答为提示


推荐阅读