[英]Slice array of arbitrary dimension with lists of start and end indices
我需要复制3D阵列的一部分。 我有副本的开始和结束索引。
例如2D数组:
[[2 2 3 4 5]
[2 3 3 4 5]
[2 3 4 4 5]
[2 3 4 5 5]
[2 3 4 5 6]]
起始索引,终止索引是:
mini = [2, 1]
maxi = [4, 3]
因此结果应为:
[[3 4 4]
[3 4 5]]
我可以写:
result = matrix[mini[0]:maxi[0], mini[1]:maxi[1]]
一般有办法吗? 3Dim或NDim阵列?
这里的窍门是实现索引语法的本质。 这个:
result = matrix[mini[0]:maxi[0], mini[1]:maxi[1]]
是python(不仅是numpy)的简写形式,用于:
indices = slice(mini[0], maxi[0]), slice(mini[1], maxi[1])
result = matrix[indices]
因此,我们只需要动态生成indices
:
lower = [2, 1, ...]
upper = [4, 3, ...]
indices = tuple(np.s_[l:u] for l, u in zip(lower, upper))
result = matrix_nd[indices]
np.s_[a:b]
是slice(a, b)
的简写。 在这里,我们建立一个元组包含多达片,你在有价值观lower
和upper
您正在寻找的是slice
对象,请参见该示例:
matrix = np.random.rand(4,5)
mini = [2, 1]
maxi = [4, 3]
slices=[slice(b,e) for b, e in zip(mini,maxi)]
print(slices)
print(matrix[slices])
print(matrix[mini[0]:maxi[0], mini[1]:maxi[1]])
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.