如果我有两个数组,如下所示:
a = numpy.array([0, 0, 1, 0, 1, 1, 1, 0, 1])
b = numpy.array([1, 1, 1, 0, 0, 1, 1, 0, 0])
有没有一种简单的方法使用 numpy 来计算两个数组中每个数组中相同索引处的元素的值等于 1 的出现次数。在上述两个数组中,位置(零索引)2、5 和 6 中的元素在两个数组中都等于 1。因此,我想在这里计数 3。
感谢您提供的任何帮助。
如果我有两个数组,如下所示:
a = numpy.array([0, 0, 1, 0, 1, 1, 1, 0, 1])
b = numpy.array([1, 1, 1, 0, 0, 1, 1, 0, 0])
有没有一种简单的方法使用 numpy 来计算两个数组中每个数组中相同索引处的元素的值等于 1 的出现次数。在上述两个数组中,位置(零索引)2、5 和 6 中的元素在两个数组中都等于 1。因此,我想在这里计数 3。
感谢您提供的任何帮助。
我将向您展示两种方式(使用 NumPy 的方式可能更多):
您可以使用“屏蔽”,然后进行比较,最后使用求和操作:
我们希望a索引中的所有值b等于 1:
part1 = a[b == 1]
现在我们想要所有part1等于 1 的地方
part2 = part1[part1 == 1]
a现在我们剩下和b等于 1的所有地方,所以我们可以简单地总结它们:
result = part2.sum()
numpy.where这很短,并且计算速度可能更快。NumPy 有一个很好的函数,它返回在某些数组中满足条件的索引:
condition_1 = (a == 1)
condition_2 = (b == 1)
现在我们可以通过说“和”来组合操作 - 二元运算符版本:&。
part1 = numpy.where(condition_1 & condition_2)
为了获得您想要的输出,我们可以获取结果索引集的长度:
result = len(part1)
阅读有关numpy.where的文档,了解它可以为您做的其他事情!
我喜欢@RobinNicole 的回答——就数学而言,您正在寻找两个布尔向量的乘积。
这里有一些 Numpy 方法可以做到这一点:
In [37]: np.dot(a, b)
Out[37]: 3
In [38]: a @ b
Out[38]: 3
这是另一个更通用的解决方案,它也适用于非布尔向量:
In [48]: ((a == 1) & (b == 1)).sum()
Out[48]: 3
sum(a * b)
应该做的工作:)
正如@n1k31t4 所指出的,它仅在您有两个仅包含 0 和 1 的数组时才有效。否则您将不得不编写如下内容:
sum((a == 1) * (b ==1))
我在这里发现有趣的是 sum 函数将布尔向量视为具有 0 (for False)和 1 (for True)的向量,您可以在其上执行算术运算(+for or,*forand等)