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=[] 应该可以解决问题。