我有一个2-d numpy数组,我想为其修改2-d块(例如9x9数独板上的3x3子块)。与其使用花式索引,不如使用内置的slice
。有没有办法使这项工作?我认为可以使用stride参数(的第三个参数slice
)来执行此操作,但是我不太清楚。我的尝试在下面。
import numpy as np
# make sample array (dim-1)
x = np.linspace(1, 81, 81).astype(int)
i = slice(0, 3)
print(x[i])
# [1 2 3]
# make sample array (dim-2)
X = x.reshape((9, 9))
假设我想访问的前3行和前3列X
。我可以用花式索引来做到这一点:
print(X[:3, :3])
# [[ 1 2 3]
# [10 11 12]
# [19 20 21]]
尝试使用与dim-1情况类似的逻辑slice
:
j = np.array([slice(0,3), slice(0,3)]) # wrong way to acccess
print(X[j])
引发以下错误:
IndexError: arrays used as indices must be of integer (or boolean) type
如果您下标X[:3, :3]
,那么在幕后您将经过一个元组,因此(slice(3), slice(3))
。
因此,您可以使用构建一个j
:
j = (slice(3), slice(3))
或者您可以通过以下方式获得该a, b
区块:
j = (slice(3*a, 3*a+3), slice(3*b, 3*b+3))
所以在这里a=0
,b=1
例如将产生的X[0:3, 3:6]
一部分。因此,一个包含前三行和后三列的块。
或者您可以制作一个具有可变数量项的元组。例如,对于一个-n
维数组,您可以创建一个n
-tuple,每个都有一个slice(3)
对象:
j = (slice(3),) * n
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句