3

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。

我不确定我是否误解了某些东西或者我的代码有问题。任何帮助表示赞赏。

4

1 回答 1

3

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

尝试:

print(numpy.einsum('i->', x, dtype=int))
于 2019-06-26T11:00:51.247 回答