Numpy 布尔数组的爱因斯坦求和

Numpy 布尔数组的爱因斯坦求和,numpy,boolean-operations,Numpy,Boolean Operations,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=[Tru

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
跳过此步骤,除非您明确指定它

尝试:


对于我来说,布尔数组上的“和”应该产生一个数值结果并不明显。逻辑和/和对我来说同样有意义,也许更多<代码>x@np.array([True,True,True])也会生成一个布尔值
True
。这是我对python文档中出现的一个句子的解释,它说“在数值上下文中(例如,当用作算术运算符的参数时),它们的行为分别类似于整数0和1。”(链接)。我不是100%确定“数字上下文”的确切含义。不确定以下情况是否可以算作数字上下文,
np.array([True,False])**np.array([True])
np.array([True,False])/np.array([True])
,以及
np.array([True,False])*np.array([True])
。我认为这个问题太主观了
print(numpy.einsum('i->', x, dtype=int))