numpy中布尔数组的爱因斯坦求和

einstein summation of boolean arrays in numpy

numpy 中布尔数组的爱因斯坦求和 (numpy.einsum) 未产生预期结果。 Numpy.einsum 函数对布尔数组进行逻辑运算,这在数字上下文中是有问题的。

# summation of a boolean numpy array

x = numpy.array([True, False, True])

print(numpy.sum(x))
# output: 2

print(numpy.einsum('i->', x))
# output: True

对于布尔数组 x = [True, False, True],我希望 x 的总和为 2,结果不应取决于函数的特定选择。然而,numpy.sum给出了2,而numpy.einsum给出了True。

我不确定是我误解了什么还是我的代码有问题。感谢任何帮助。

此处的区别在于 sum 在求和之前将 boolean 转换为整数,而 einsum 跳过此步骤,除非您明确指定。

尝试:

print(numpy.einsum('i->', x, dtype=int))