带有 Python 的二维数组,用于 cartopy 地图插图

2D array with Python for cartopy map illustration

使用下面的代码,我从本地保存的 netCDF 文件中读取数据。 x 和 y 变量是经度和纬度元素的一维列表。 sal_values 相反是一个掩码数组;列表列表 see image 1 link.

这绝对没问题;但我想对二维数组中的 sal_values 列表进行排序,以便根据 x 和 y 绘制我的数据。当我 运行 例如 sal_values [3][2] 我收到错误 "index 1 is out of bounds for axis 0 with size 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,:,:]) 

不过我想了解下切片的方法。 ':' 之后的 ',' 究竟做了什么,为什么如果我省略 '0' 然后我再次收到错误 "index 1 is out of bounds for axis 0 with size 1"。

请问有没有很好的资源来解释这个。 谢谢。

参见:https://numpy.org/doc/1.18/reference/arrays.indexing.html

好像d.variables['sss']是一个3维数组;写 d.variables['sss'][:] 给你完整的 3D 字段,d.variables['sss'][0,:,:] 切片第一个维度和 returns 完整的其他 2 个维度,所以你最终得到一个 2D 数组。

我在猜测这一点,但是如果 d.variables['sss'] 的维度是例如(time, lat, lon), d.variables['sss'][0,:,:] 给你第一个时间索引和完整的空间 lat/lon 字段。