[英]Cropping a NumPy array of an arbitrary dimension given two corners
有几个关于切片2D和3D NumPy数组的文章,但是在我的程序中,数组的尺寸未知。 考虑一个任意维度为n
(正整数)且形状为D=[d1,...,dn]
( di
s为非负整数)的NumPy ndarray A
,例如:
import numpy as np
D=np.array([2,3,4,5])
A=np.random.rand(*D)
现在我需要提取的一个块A
从开始D1=[d11,...,d1n]
到D2=[d21,...,d2n]
其中对于所有0<i<=n : 0<=d1i<=d2i<=di
。 就像是:
A[D1:D2]
如果我新创建了n
那么我可以简单地使用A[d11:d21,...,d1i:d2i,...,d1n:d2n]
,但对我而言并非如此。 我将不胜感激,如果你能帮助我知道了什么是种植的最有效的方式A
给定的D1
和D2
。
@Joe所指的numpy索引页面的部分可能是这样的:
注意
请记住,切片元组始终可以构造为obj并以x[obj]
表示法使用。 切片对象可以在构造中使用[start:stop:step]
表示法代替。 例如,x[1:10:5,::-1]
也可以实现为:
obj = (slice(1,10,5), slice(None,None,-1))
x[obj]
这对于构造可用于任意维数组的通用代码很有用。
使用此概念,您应该能够提前构建切片的元组,然后将其应用于A
obj = tuple(slice(D1[i], D2[i]) for i in range(D1.shape[0]))
A[obj]
注意*这实际上并没有使用高级索引,因为您仍在提供切片对象的元组,这与使用以冒号和逗号分隔的切片的手/功能等效: A[d11:d21, ...
高级索引使用数组不同的数据类型,而不是专门用于slice
对象的元组。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.