我有一个大的 numpy
矩阵 M
。矩阵的某些行的所有元素都为零,我需要获取这些行的索引。我正在考虑的天真的方法是遍历矩阵中的每一行,然后检查每个元素。
使用 numpy
完成此操作的更好更快的方法是什么?
原文由 Jack Twain 发布,翻译遵循 CC BY-SA 4.0 许可协议
我有一个大的 numpy
矩阵 M
。矩阵的某些行的所有元素都为零,我需要获取这些行的索引。我正在考虑的天真的方法是遍历矩阵中的每一行,然后检查每个元素。
使用 numpy
完成此操作的更好更快的方法是什么?
原文由 Jack Twain 发布,翻译遵循 CC BY-SA 4.0 许可协议
如果元素是 int(0)
,则接受的答案有效。如果要查找所有值为 0.0(浮点数)的行,则必须使用 np.isclose()
:
print(x)
# output
tensor([[0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
0., 0., 0.],
[0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
0., 1., 0.],
[0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
1., 0., 0.],
[0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
0., 0., 0.],
])
np.where(np.all(np.isclose(labels, 0), axis=1))
(array([ 0, 3]),)
注意:这也适用于 PyTorch Tensors,当你想找到归零的 multihot 编码向量时,这非常有用。
原文由 crypdick 发布,翻译遵循 CC BY-SA 4.0 许可协议
2 回答5.2k 阅读✓ 已解决
2 回答1.1k 阅读✓ 已解决
4 回答1.4k 阅读✓ 已解决
3 回答1.3k 阅读✓ 已解决
3 回答1.3k 阅读✓ 已解决
1 回答2.5k 阅读✓ 已解决
2 回答893 阅读✓ 已解决
这是一种方法。我假设已使用
import numpy as np
导入了 numpy。这个答案略有不同: How to check that a matrix contains a zero column?
这是怎么回事:
any
方法返回 True 如果数组中的任何值是“truthy”。非零数字被认为是 True,0 被认为是 False。通过使用参数axis=1
,该方法应用于每一行。对于示例a
,我们有:所以每个值表示相应的行是否包含非零值。
~
运算符是二进制“非”或补码:(给出相同结果的另一个表达式是
(a == 0).all(axis=1)
。)要获取行索引,我们使用
where
函数。它返回其参数为 True 的索引:请注意
where
返回了一个包含单个数组的元组。where
适用于 n 维数组,因此它总是返回一个元组。我们想要那个元组中的单个数组。