首页 > 解决方案 > 从 3D 数组中提取第 n 个值

问题描述

假设我有一个 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])

标签: pythonnumpy

解决方案


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

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 索引的更多信息。

更新

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

省略号扩展到 : 对象的数量,以创建与 x.ndim 长度相同的选择元组

更远


推荐阅读