如何用NumPy删除只包含0的数组行

  • Post category:Python

要删除只包含0的数组行,可以使用NumPy中的布尔索引技术。布尔索引是一种使用布尔值来索引数据的技术,通过布尔索引可以轻松选择特定的行列数据。

下面是使用NumPy删除只包含0的数组行的完整攻略:

step 1:导入NumPy

import numpy as np

step 2: 创建测试数组

创建一个包含多行多列的测试数组,其中某些行只包含零。

arr = np.array([[1, 2, 0],
                [0, 0, 0],
                [4, 0, 6],
                [0, 0, 0],
                [8, 9, 0]])

step 3: 列出只包含0的行

生成与测试数组arr形状相同的只包含0和1的布尔数组zeros,zeros中元素的值为True表示对应位置在arr中的元素为0。

zeros = np.zeros_like(arr, dtype=bool)
zeros[arr == 0] = True

step 4: 删除只包含0的行

利用np.any()函数判断哪些行只包含0,再用布尔索引删除这些行。

arr = arr[np.any(~zeros, axis=1)]
print(arr)

运行结果:

[[1 2 0]
 [4 0 6]
 [8 9 0]]

可以看到,运行结果中只包含原始数组中所有非全零的行。

示例说明

示例1:

arr1 = np.array([[1, 0, 0],
                 [0, 0, 0],
                 [4, 3, 6],
                 [0, 0, 0],
                 [8, 9, 0]])
zeros1 = np.zeros_like(arr1, dtype=bool)
zeros1[arr1 == 0] = True
arr1 = arr1[np.any(~zeros1, axis=1)]
print(arr1)

输出结果:

[[1 0 0]
 [4 3 6]
 [8 9 0]]

示例2:

arr2 = np.array([[0, 0, 0],
                 [0, 0, 0],
                 [0, 0, 0],
                 [0, 0, 0],
                 [0, 0, 0]])
zeros2 = np.zeros_like(arr2, dtype=bool)
zeros2[arr2 == 0] = True
arr2 = arr2[np.any(~zeros2, axis=1)]
print(arr2)

输出结果:

[]

在这个示例中,原始数组中所有的行都只包含了0,所以最终输出结果中没有任何元素。