【发布时间】:2019-11-08 07:21:00
【问题描述】:
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。
我不确定是我误解了什么还是我的代码有问题。任何帮助表示赞赏。
【问题讨论】:
-
布尔数组上的“总和”应该产生数字结果对我来说并不明显。逻辑和/对我来说同样有意义,也许更多。
x@np.array([True,True,True])也会产生一个布尔值True。 -
这是我对出现在 python 文档中的一句话的解释,它说“在数字上下文中(例如,当用作算术运算符的参数时),它们的行为分别类似于整数 0 和 1 。” (链接docs.python.org/3.7/library/stdtypes.html)。我不是 100% 确定“数字上下文”的确切含义。不确定以下情况是否可以算作数字上下文
np.array([True, False])**np.array([True])、np.array([True, False])/np.array([True])和np.array([True, False])*np.array([True])。我觉得这个问题太主观了
标签: numpy boolean-operations numpy-einsum