2D массив с Python для иллюстрации картографической карты - PullRequest
0 голосов
/ 11 февраля 2020

Используя приведенный ниже код, я читаю данные из файла netCDF, сохраненного локально. Переменные x и y являются одномерными списками элементов долготы и широты. Вместо этого sal_values ​​является замаскированным массивом; список списков см. изображение 1 ссылка .

Это абсолютно нормально; но я хотел бы отсортировать список sal_values ​​в двумерном массиве для того, чтобы построить мои данные по x и y. Когда я запускаю, например, sal_values ​​[3] [2], я получаю сообщение об ошибке «Индекс 1 выходит за пределы для оси 0 с размером 1», что означает, что sal_values ​​не являются фактическим двумерным массивом.

import cartopy.crs as ccrs[enter image description here][1]
import matplotlib.pyplot as plt
import numpy as np
import netCDF4



file=r"C:\Users\CFla\Desktop\Ab_sss.nc"
d=netCDF4.Dataset(file)

x=d.variables['lon'][:]
y=d.variables['lat'][:]
sal_values=(d.variables['sss'][:])
sal_values[1][2]


Я нашел следующую строку кода, которая, кажется, делает свое дело:

sal_values=(d.variables['sss'][0,:,:]) 

, но я хотел бы понять метод нарезки. Что именно делает ',' after ':' и почему, если я опускаю '0', я снова получаю сообщение об ошибке «Индекс 1 выходит за пределы для оси 0 с размером 1».

Есть хороший источник, чтобы объяснить это, пожалуйста. Спасибо.

1 Ответ

0 голосов
/ 12 февраля 2020

См .: https://numpy.org/doc/1.18/reference/arrays.indexing.html

Кажется, что d.variables['sss'] - это трехмерный массив; запись d.variables['sss'][:] дает вам полное трехмерное поле, d.variables['sss'][0,:,:] разрезает первое измерение и возвращает полные два других измерения, так что в итоге вы получаете двумерный массив.

Я предполагаю, что на данный момент, но если размеры d.variables['sss'] равны, например, (time, lat, lon), d.variables['sss'][0,:,:] дает первый индекс времени и полное пространственное поле широты и долготы.

...