Numpy 将数组分配给另一个数组中的单个点的最佳方法 (4D)
Numpy best way to assign array to a single point in another array (4D)
我想将每个数组 (new_grid) 存储在另一个数组 (master_grid) 的给定单元格中,这根据 i 和 j 的不同而不同:
master_grid[i][j]=new_grid
当我 运行 代码时 returns 上面一行出现以下错误:
<ipython-input-233-e449b6b2f1a1> in <module>
16 new_grid=coordinates_within_radius(coords_ref, coords_grid, radius)
17
---> 18 master_grid[i,j]=new_grid
TypeError: list indices must be integers or slices, not tuple
我同时使用了 numpy 和 xarray,但到目前为止还没有找到将 "inner" 数组索引到 master_grid
.
中的方法
从代码中可以看出,有一个函数可以判断哪些点在一个半径内,结果是一个带有经纬度的网格。
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import xarray as xr
import cartopy.crs as ccrs
import seaborn as sns
import geopy.distance
### Code for locating points within a radius
def coordinates_within_radius( coords_ref, coords_grid, radius ):
if type(coords_grid) == np.ndarray or type(coords_grid) == list:
new_grid = [coords_grid[i] for i in range(len(coords_grid)) if geopy.distance.distance(coords_ref, coords_grid[i]).km < radius]
else:
if geopy.distance.distance(coords_ref, coords_grid).km < radius:
new_grid=coords_grid;
if len(new_grid) == 0:
print('the grid is empty')
return new_grid
storm=[1,2,3,4]
date_time=[1,2,3,4,5]
radius=500
scale_lat=6
master_grid=[]
for i in range(len(storm)):
for j in range(len(date_time)):
coords_ref = [30, -80]
lon = np.arange(coords_ref[1] - scale_lat,coords_ref[1] + scale_lat, 0.25)
lat = np.arange(coords_ref[0] - scale_lat,coords_ref[0] + scale_lat, 0.25)
coords_grid=np.zeros((len(lon) * len(lat), 2))
coords_grid = [[lat[y],lon[x]] for x in range(len(lat)) for y in range(len(lon))]
new_grid=coordinates_within_radius(coords_ref, coords_grid, radius)
master_grid[i,j]=new_grid
master_grid = np.zeros((len(storm), len(date_time)))
而不是 master_grid=[]
应该可以解决问题。
我想将每个数组 (new_grid) 存储在另一个数组 (master_grid) 的给定单元格中,这根据 i 和 j 的不同而不同:
master_grid[i][j]=new_grid
当我 运行 代码时 returns 上面一行出现以下错误:
<ipython-input-233-e449b6b2f1a1> in <module>
16 new_grid=coordinates_within_radius(coords_ref, coords_grid, radius)
17
---> 18 master_grid[i,j]=new_grid
TypeError: list indices must be integers or slices, not tuple
我同时使用了 numpy 和 xarray,但到目前为止还没有找到将 "inner" 数组索引到 master_grid
.
从代码中可以看出,有一个函数可以判断哪些点在一个半径内,结果是一个带有经纬度的网格。
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import xarray as xr
import cartopy.crs as ccrs
import seaborn as sns
import geopy.distance
### Code for locating points within a radius
def coordinates_within_radius( coords_ref, coords_grid, radius ):
if type(coords_grid) == np.ndarray or type(coords_grid) == list:
new_grid = [coords_grid[i] for i in range(len(coords_grid)) if geopy.distance.distance(coords_ref, coords_grid[i]).km < radius]
else:
if geopy.distance.distance(coords_ref, coords_grid).km < radius:
new_grid=coords_grid;
if len(new_grid) == 0:
print('the grid is empty')
return new_grid
storm=[1,2,3,4]
date_time=[1,2,3,4,5]
radius=500
scale_lat=6
master_grid=[]
for i in range(len(storm)):
for j in range(len(date_time)):
coords_ref = [30, -80]
lon = np.arange(coords_ref[1] - scale_lat,coords_ref[1] + scale_lat, 0.25)
lat = np.arange(coords_ref[0] - scale_lat,coords_ref[0] + scale_lat, 0.25)
coords_grid=np.zeros((len(lon) * len(lat), 2))
coords_grid = [[lat[y],lon[x]] for x in range(len(lat)) for y in range(len(lon))]
new_grid=coordinates_within_radius(coords_ref, coords_grid, radius)
master_grid[i,j]=new_grid
master_grid = np.zeros((len(storm), len(date_time)))
而不是 master_grid=[]
应该可以解决问题。