Python的多维切片数组

3

我想要选择2D-np.array的特定行和列,但不知道如何高效地实现。

import numpy as np 

array = np.random.rand(4*100,4*360)

lon_min = np.array([-72.5, -72.5, -70, -67.5, -65, -62.5, -60, -57.5, -55, -52.5, -50])
lon_max = lon_min + 2.5
lat_min = np.array([-10, -7.5, -5, -4, -3, -3, -2, -1, -1, -1, -1])
lat_max = lat_min + 2.5 
indices_lon_min = (180+lon_min)*4
indices_lat_min = (50-lat_min)*4
indices_lon_max = indices_lon_min + 4*2.5
indices_lat_max = indices_lat_min -4*2.5

> indices_lat_min = [240. 230. 220. 216. 212. 212. 208. 204. 204. 204. 204.]
> indices_lat_max = [230. 220. 210. 206. 202. 202. 198. 194. 194. 194. 194.]
> indices_lon_min = [430. 430. 440. 450. 460. 470. 480. 490. 500. 510. 520.]
> indices_lon_max = [440. 440. 450. 460. 470. 480. 490. 500. 510. 520. 530.]

我希望有这样一个东西:

array[indices_lat_min.astype(int): indices_lat_max.astype(int), indices_lon_min.astype(int):indices_lon_max.astype(int)]

基本上我想要实现的是:
array[240:230, 430:440]

但是有多个“切片”。

你的数组大小为(400, 360),但你想访问它的更大值,比如530 - scleronomic
@scleronomic (400, 4*360) - clearseplex
很抱歉,但仍然有效,index_lat_max 值为 406 - scleronomic
@scleronomic 你是对的,我需要检查一下。 - clearseplex
1个回答

1
也许是这样的:

可能是这样的:

array[list(map(range, indices_lat_min.astype(int), indices_lat_max.astype(int))),
      list(map(range, indices_lon_min.astype(int), indices_lon_max.astype(int)))]

这基本上是你的想法,我只是使用map获取索引列表中所有最小最大对。
对于降序范围:
array[list(map(range, indices_lat_min.astype(int), indices_lat_max.astype(int), np.full(indices_lat_max.size, -1))),
      list(map(range, indices_lon_min.astype(int), indices_lon_max.astype(int),))]

它起作用了,但我必须更改我的数组,使得纬度的范围现在是降序的。有没有一种修改这个的方法? - clearseplex
1
可以在map函数中添加参数:np.repeat(-1, indices_lat_max.size) - clearseplex

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接