从3D数组中提取第n个值

时间:2018-09-29 20:42:12

标签: python numpy

说我有一个3D阵列,例如:

>>> arr = numpy.arange(36).reshape(3, 4, 3)
>>> arr
array([[[ 0,  1,  2],
        [ 3,  4,  5],
        [ 6,  7,  8],
        [ 9, 10, 11]],

       [[12, 13, 14],
        [15, 16, 17],
        [18, 19, 20],
        [21, 22, 23]],

       [[24, 25, 26],
        [27, 28, 29],
        [30, 31, 32],
        [33, 34, 35]]])

如何从每个最里面的行中提取第 n 个值?

如果我要获取索引1的值,那么如何提取以下内容?

array([[ 1,  4,  7, 10],
       [13, 16, 19, 22],
       [25, 28, 31, 34]])

array([ 1,  4,  7, 10, 13, 16, 19, 22, 25, 28, 31, 34])

2 个答案:

答案 0 :(得分:2)

您可以使用最后一个索引进行访问:

import numpy

arr = numpy.arange(36).reshape(3, 4, 3)

print(arr[:, :, 1])

输出

[[ 1  4  7 10]
 [13 16 19 22]
 [25 28 31 34]]

或者,

print(arr[:, :, 1].flatten())

输出

[ 1  4  7 10 13 16 19 22 25 28 31 34]

您可以找到有关numpy索引here的更多信息。

更新

正如@MadPhysicist在评论中提到的那样,您可以使用ravel而不是flatten,主要区别是flatten返回副本,而ravel返回视图。您也可以使用arr[..., 1]访问最后一个索引,称为省略号。从文档中:

  

省略号扩展为进行选择所需的:个对象   与x.ndim长度相同的元组

进一步

答案 1 :(得分:-1)

要从此类数组中提取元素,您可以执行以下操作:

>>> import numpy as np   
>>> arr = np.arange(36).reshape(3, 4, 3)
>>> arr[:,:,1]
array([[ 1,  4,  7, 10],
       [13, 16, 19, 22],
       [25, 28, 31, 34]])

,如果您想要展平的数组,可以执行以下操作:

>>> arr.flatten()
array([ 1,  4,  7, 10, 13, 16, 19, 22, 25, 28, 31, 34])