使用切片操作来获取NumPy数组的第n列

4
拥有以下示例数组,如何通过列切片获取以下结果(例如第三列)[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
https://docs.scipy.org/doc/numpy-dev/user/quickstart.html#indexing-slicing-and-iterating - Bi Rico
@BiRico的链接已经失效了! - arilwan
1
@arilwan https://docs.scipy.org/doc/numpy-1.13.0/reference/arrays.indexing.html - Georges
2个回答

12

对于任意维度的通用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])

3

Numpy支持像matlab一样的“分号表示法”。在您的情况下,您可以通过执行以下操作来获取第三列:
x = r[:,:,2]
然后
a = numpy.concatenate([x[0],x[1],x[2]])


3
你可以使用 x.flatten() 代替 numpy.concatenate([x[0],x[1],x[2]]) - Akavall

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接