在numpy中切片列集

时间:2019-02-01 16:24:44

标签: arrays numpy slice broadcast stride

这样考虑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]]

如何使用a来切片/广播/跨步b以得到如下结果:

array([[[1, 2],
        [2, 3],
        [0, 3]],

       [[1, 0],
        [2, 2],
        [0, 2]],

       [[2, 1],
        [3, 2],
        [3, 2]]])

1 个答案:

答案 0 :(得分:1)

使用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]]])