+-

我有一个大的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查找哪些行将所有元素都作为零填充在矩阵中 - 乐贴网