为什么在计算反转布尔值系列的总和时需要括号或新变量?

鉴于一些数据:


>> s = pd.Series([True, False, True, False, True])

>> ~s.values == (~s).values

array([True,  True, True,  True, True])

但是


>> ~s.values.sum()

-4 

>> (~s).values.sum()

2

并且


>> x = ~s.values

>> x.sum() == (~s).values.sum()

True

为什么我们需要使用括号(~s).values或存储~s.values在一个新变量中才能为~Series.sum()我们提供正确数量的False值s?


这是因为优先级,如@juanpa.arrivillaga 和@cwallenpoole 所述。确实:


>> ~3 is -4

True


繁花不似锦
浏览 215回答 3
3回答

qq_遁去的一_1

由于优先级的属性的访问比的高优先级~操作。所以它在被否定之前被求和。许多 numpy/pandas 对象覆盖了矢量化计算的按位运算符。不幸的是,这将导致他们的行为出乎意料。换句话说,它被评估为:~((s.values).sum())

MMMHUHU

如果没有括号,首先使用原始值调用 sum()。然后 sum() 的结果被反转。使用 (~values).sum 首先反转值,然后使用反转列表对 sum() 进行校准。

慕妹3146593

它与评估顺序(或优先级)有关。~产生向右的表达式反转。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python