Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python(IMS snowcover)中对来自大数据集的二维纬度、经度和数据进行子集_Python_Arrays_Numpy_Matplotlib Basemap - Fatal编程技术网

在Python(IMS snowcover)中对来自大数据集的二维纬度、经度和数据进行子集

在Python(IMS snowcover)中对来自大数据集的二维纬度、经度和数据进行子集,python,arrays,numpy,matplotlib-basemap,Python,Arrays,Numpy,Matplotlib Basemap,我心中有一个“简单”的目标,结果证明很难实现。我有三个二维数组lat,lon和data,都有维度(2457624576)。前两个是变量data的纬度和经度坐标,我试图在地图上绘制它。我从二进制文件和文本文件的组合中读取所有这些数据,因此任何预处理操作实际上都是不可能的,需要在Python脚本中完成 考虑到阵列的维数,由于内存限制,即使在全球的一个小区域上选择一个基线图投影,也几乎不可能直接绘制数据。我已经试过了,在尝试使用basemap.contourf绘图时出现内存错误 因此,我需要在将数组传

我心中有一个“简单”的目标,结果证明很难实现。我有三个二维数组
lat
lon
data
,都有维度(2457624576)。前两个是变量
data
的纬度和经度坐标,我试图在地图上绘制它。我从二进制文件和文本文件的组合中读取所有这些数据,因此任何预处理操作实际上都是不可能的,需要在Python脚本中完成

考虑到阵列的维数,由于内存限制,即使在全球的一个小区域上选择一个基线图投影,也几乎不可能直接绘制数据。我已经试过了,在尝试使用
basemap.contourf
绘图时出现内存错误

因此,我需要在将数组传递给轮廓函数之前对其进行子集划分。我试过很多东西,但似乎都不管用。我的想法是这样做

lat_bnds, lon_bnds = [35, 50], [5, 20]
condition=((lats > lat_bnds[0]) & (lats < lat_bnds[1])) & (lons > lon_bnds[0]) & (lons < lon_bnds[1])

我不知道你是如何得到一个形状的数组,但是考虑到如果你想要一个原始数组的子集并且你有你的条件,你可以从原始列表中切片。

a = np.random.randint(10,50, size=(50,2))  # ---- generate coordinates

array([[44, 11],
       [40, 36],
       [19, 26],
       ..., 
       [33, 26],
       [42, 12],
       [15, 25]])

lats = a[:, 1]  # ---- latitude is Y-axis
lons = a[:, 0]  # ---- longitude is X-axis
lat_bnds, lon_bnds = [35, 50], [5, 20]  # ---- your desired bounds

condition =((lats > lat_bnds[0]) & (lats < lat_bnds[1])) & 
            (lons > lon_bnds[0]) & (lons < lon_bnds[1])

condition
array([False, False, False, ..., False, False, False], dtype=bool)

condition.shape  # => (50,)

a[condition]     # ---- slice the original array

array([[11, 45],
       [15, 40],
       [15, 43],
       [15, 49]])
a=np.random.randint(10,50,size=(50,2))#----生成坐标
数组([[44,11],
[40, 36],
[19, 26],
..., 
[33, 26],
[42, 12],
[15, 25]])
纬度=a[:,1]#----纬度是Y轴
lons=a[:,0]#----经度是X轴
lat_bnds,lon_bnds=[35,50],[5,20]——您想要的边界
条件=((纬度>纬度[0])和(纬度<纬度[1])和
(lons>lon_bnds[0])和(lons(50,)
a[条件]#----对原始数组进行切片
数组([[11,45],
[15, 40],
[15, 43],
[15, 49]])

希望能让你进入你想去的方向。

< p>我不知道你是如何得到一个那个形状的数组,但是考虑到如果你想要一个原始数组的子集并且你有你的条件,你可以从原始列表中切片。
a = np.random.randint(10,50, size=(50,2))  # ---- generate coordinates

array([[44, 11],
       [40, 36],
       [19, 26],
       ..., 
       [33, 26],
       [42, 12],
       [15, 25]])

lats = a[:, 1]  # ---- latitude is Y-axis
lons = a[:, 0]  # ---- longitude is X-axis
lat_bnds, lon_bnds = [35, 50], [5, 20]  # ---- your desired bounds

condition =((lats > lat_bnds[0]) & (lats < lat_bnds[1])) & 
            (lons > lon_bnds[0]) & (lons < lon_bnds[1])

condition
array([False, False, False, ..., False, False, False], dtype=bool)

condition.shape  # => (50,)

a[condition]     # ---- slice the original array

array([[11, 45],
       [15, 40],
       [15, 43],
       [15, 49]])
a=np.random.randint(10,50,size=(50,2))#----生成坐标
数组([[44,11],
[40, 36],
[19, 26],
..., 
[33, 26],
[42, 12],
[15, 25]])
纬度=a[:,1]#----纬度是Y轴
lons=a[:,0]#----经度是X轴
lat_bnds,lon_bnds=[35,50],[5,20]——您想要的边界
条件=((纬度>纬度[0])和(纬度<纬度[1])和
(lons>lon_bnds[0])和(lons(50,)
a[条件]#----对原始数组进行切片
数组([[11,45],
[15, 40],
[15, 43],
[15, 49]])

希望这能帮你找到你想要的方向。

如果有人在试图用Python绘制IMS 1-km分辨率数据时看到这篇文章,我有一个穷人解决方案,它可以很好地工作

内存错误由绘图例程引发,但数组仍然可以存储到python中。因此,我没有使用where函数进行子集设置,而是尝试使用显式索引,如

lat_subset=lat[imin:imax, jmin:jmax]
然后使用plot.imshow()打印结果,而不进行等高线打印或使用地图投影来了解数据的外观。这让我能够选择我感兴趣的区域所在的指数范围。现在,我能够在没有内存错误的情况下绘制等高线图

我有一个带笔记本的小存储库,上面显示了如何绘制这些数据:。
它的优点是可以直接在线读取文件,尽管考虑到坐标文件的大小,仍然需要下载它们

如果有人在试图用Python绘制IMS 1-km分辨率数据时遇到这篇文章,我有一个穷人解决方案,它可以很好地工作

内存错误由绘图例程引发,但数组仍然可以存储到python中。因此,我没有使用where函数进行子集设置,而是尝试使用显式索引,如

lat_subset=lat[imin:imax, jmin:jmax]
然后使用plot.imshow()打印结果,而不进行等高线打印或使用地图投影来了解数据的外观。这让我能够选择我感兴趣的区域所在的指数范围。现在,我能够在没有内存错误的情况下绘制等高线图

我有一个带笔记本的小存储库,上面显示了如何绘制这些数据:。
它的优点是可以直接在线读取文件,尽管考虑到坐标文件的大小,仍然需要下载它们

嘿,谢谢你考虑这个问题,但不幸的是,这没有帮助。我希望事情能这么简单:(.纬度和经度是原始极赤平投影上的二维阵列,因此简单地对它们进行切片不会有任何好处。需要检查条件为真的每个网格点,并相应地对阵列进行子集划分。我在文章中添加了一些额外的信息,可能有助于再现问题。是的,sample数据会很有用。如果将点投影到立体投影中,您可能希望在同一投影中报告边界框坐标嘿,感谢您研究了这个问题,但不幸的是,这没有帮助。我希望它能这么简单:(.纬度和经度是原始极赤平投影上的二维阵列,因此简单地对它们进行切片不会有任何好处。需要检查条件为真的每个网格点,并相应地对阵列进行子集划分。我在文章中添加了一些额外的信息,可能有助于再现问题。是的,sampl如果这些点被投影到立体投影中,你可能希望报告边界框坐标