Numpy лучший способ присвоить массив одной точке в другом массиве (4D) - PullRequest
0 голосов
/ 04 мая 2020

Я хотел бы сохранить каждый из массивов (new_grid) в данной ячейке в другом массиве (master_grid), который изменяется в зависимости от i и j:

master_grid[i][j]=new_grid

Когда я запускаю код, он возвращает следующую ошибку для приведенной выше строки:

<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, но до сих пор не смог найти способ индексации "внутреннего" "Массивы в 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 

1 Ответ

0 голосов
/ 05 мая 2020
master_grid = np.zeros((len(storm), len(date_time)))

вместо master_grid=[] должно решить проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...