python - 用numpy查找矩阵中哪些行的所有元素都为零

标签 python numpy matrix

我有一个大的 numpy 矩阵 M。矩阵的某些行的所有元素都为零,我需要获取这些行的索引。我正在考虑的幼稚方法是遍历矩阵中的每一行,然后检查每个元素。

使用 numpy 完成此任务有什么更好更快的方法?

最佳答案

这是一种方法。我假设已经使用 import numpy as np 导入了 numpy。

In [20]: a
Out[20]: 
array([[0, 1, 0],
       [1, 0, 1],
       [0, 0, 0],
       [1, 1, 0],
       [0, 0, 0]])

In [21]: np.where(~a.any(axis=1))[0]
Out[21]: array([2, 4])

这个答案略有不同:How to check that a matrix contains a zero column?

这是怎么回事:

如果数组中的任何值是“真”,则 any 方法返回 True。非零数被认为是真,0 被认为是假。通过使用参数 axis=1,该方法应用于每一行。对于示例 a,我们有:

In [32]: a.any(axis=1)
Out[32]: array([ True,  True, False,  True, False], dtype=bool)

所以每个值表示对应的行是否包含非零值。 ~ 运算符是二进制“非”或补码:

In [33]: ~a.any(axis=1)
Out[33]: array([False, False,  True, False,  True], dtype=bool)

(给出相同结果的替代表达式是 (a == 0).all(axis=1)。)

要获取行索引,我们使用 where 函数。它返回其参数为 True 的索引:

In [34]: np.where(~a.any(axis=1))
Out[34]: (array([2, 4]),)

请注意,where 返回一个包含单个数组的元组。 where 适用于 n 维数组,因此它总是返回一个元组。我们想要那个元组中的单个数组。

In [35]: np.where(~a.any(axis=1))[0]
Out[35]: array([2, 4])

关于python - 用numpy查找矩阵中哪些行的所有元素都为零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23726026/

相关文章:

python - 使用列表理解对嵌套在列表内的字典进行操作

python - Pandas 箱线图,在每个子图中按不同的 ylim 分组

python - 函数认为我正在传递一个 float

python - 了解 NumPy 的卷积

c++ - 您将如何使用二维来处理一维内存?

python - 管理 Python 版本和库需要什么?

python - 如何使用混合字母和数字的键对 Python 中的字典进行排序?

python - Numpy.minimum 与 Pandas.Series 时间戳类型错误 : Cannot compare 'Timestamp' with 'int'

c - 使用c中的线程乘法矩阵

java - 动态规划 : Bits Array Java