+-
python – 使用numpy查找哪些行将所有元素都作为零填充在矩阵中
我有一个大的numpy矩阵M.矩阵的一些行的所有元素都为零,我需要得到那些行的索引.我正在考虑的天真方法是循环遍历矩阵中的每一行,然后检查每个元素.但是我认为使用numpy有更好,更快的方法来实现这一点.希望你能帮忙!
最佳答案
这是一种方式.我假设numpy已使用import numpy作为np导入.

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?

这是发生了什么:

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

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

因此,每个值指示相应的行是否包含非零值. 〜运算符是二进制“not”或补码:

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]),)

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

In [35]: np.where(~a.any(axis=1))[0]
Out[35]: array([2, 4])
点击查看更多相关文章

转载注明原文:python – 使用numpy查找哪些行将所有元素都作为零填充在矩阵中 - 乐贴网