切片numpy数组得到第n列

时间:2016-07-23 15:55:37

标签: python numpy

如下面的示例数组,您如何按列切片以获得以下内容(例如第3列)[0, 0, ..., 1338, 1312, 1502, 0, ...] 寻找最有效的方式,谢谢!

>>> r
array([[[   0,    0,    0],
        [   0,    0,    0],
        [   0,    0,    0],
        [   0,    0,    0],
        [   0,    0,    0],
        [   0,    0,    0]],

       [[   0,    0, 1338],
        [   0,    0, 1312],
        [   0,    0, 1502],
        [   0,    0,    0],
        [   0,    0,    0],
        [   0,    0,    0]],

       [[   0,    0, 1400],
        [   0,    0, 1277],
        [   0,    0, 1280],
        [   0,    0,    0],
        [   0,    0,    0],
        [   0,    0,    0]]], dtype=uint16)

2 个答案:

答案 0 :(得分:9)

对于任何维度的通用ndarray,一种方法是 -

arr[...,n]

要获得展平版本,请使用.ravel()方法 -

arr[...,n].ravel()

示例运行 -

In [317]: arr
Out[317]: 
array([[[[2, 1, 2],
         [0, 2, 3],
         [1, 0, 1]],

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


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

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

In [318]: arr[...,2].ravel()
Out[318]: array([2, 3, 1, 0, 2, 1, 0, 3, 1, 1, 0, 2])

答案 1 :(得分:2)

Numpy支持"分号符号"喜欢matlab。 在您的情况下,您应该能够通过以下方式获取第三列:
x = r[:,:,2]
然后
a = numpy.concatenate([x[0],x[1],x[2]])