在 numpy 中切片列集
Slice sets of columns in numpy
这样考虑 numpy array
:
>>> a = np.array([[1, 2, 3, 0, 1], [2, 3, 2, 2, 2], [0, 3, 3, 2, 2]])
>>> a
array([[1, 2, 3, 0, 1],
[2, 3, 2, 2, 2],
[0, 3, 3, 2, 2]])
还有一个 array
,其中包含要切片的几对列索引(特定列可以出现在多对中):
b = [[0,1], [0,3], [1,4]]
我怎样才能 slice/broadcast/stride a
使用 b
得到这样的结果:
array([[[1, 2],
[2, 3],
[0, 3]],
[[1, 0],
[2, 2],
[0, 2]],
[[2, 1],
[3, 2],
[3, 2]]])
使用b
作为列索引对数组进行子集化,然后转置结果:
a[:, b].swapaxes(0, 1)
# array([[[1, 2],
# [2, 3],
# [0, 3]],
# [[1, 0],
# [2, 2],
# [0, 2]],
# [[2, 1],
# [3, 2],
# [3, 2]]])
这样考虑 numpy array
:
>>> a = np.array([[1, 2, 3, 0, 1], [2, 3, 2, 2, 2], [0, 3, 3, 2, 2]])
>>> a
array([[1, 2, 3, 0, 1],
[2, 3, 2, 2, 2],
[0, 3, 3, 2, 2]])
还有一个 array
,其中包含要切片的几对列索引(特定列可以出现在多对中):
b = [[0,1], [0,3], [1,4]]
我怎样才能 slice/broadcast/stride a
使用 b
得到这样的结果:
array([[[1, 2],
[2, 3],
[0, 3]],
[[1, 0],
[2, 2],
[0, 2]],
[[2, 1],
[3, 2],
[3, 2]]])
使用b
作为列索引对数组进行子集化,然后转置结果:
a[:, b].swapaxes(0, 1)
# array([[[1, 2],
# [2, 3],
# [0, 3]],
# [[1, 0],
# [2, 2],
# [0, 2]],
# [[2, 1],
# [3, 2],
# [3, 2]]])