首页 > 解决方案 > Numpy根据条件将3d数组减少到2d

问题描述

我有一个像这样的 3d 数组:

array([[[ 0,  1],
        [ 0,  0]],

        [[ 0,  0],
        [ 6,  7]]])

我想要做的是将它减少为这样的二维数组:

array([[1, 0],
       [0, 1]])

如果原始的每个子数组具有非零元素,则为 1,如果相应子数组的所有元素都为零,则为 0。

我怎样才能干净地做到这一点,没有循环?

标签: pythonnumpy

解决方案


您可以numpy.ndarray.any沿最后一个轴 ( axis=-1) 使用:

>>> arr = np.array([[[ 0,  1],
        [ 0,  0]],

        [[ 0,  0],
        [ 6,  7]]])

>>> arr.any(axis=-1).astype(int)
array([[1, 0],
       [0, 1]])

推荐阅读