r是一个
numpy(rec)数组。
r["dt"] >= startdate(boolean)数组也是如此。对于numpy数组,该&操作返回两个布尔数组中的
elementwise和。
该NumPy的开发者觉得有没有人通常理解的方式来评估布尔上下文中的数组:这可能意味着True,如果任何元素
True,或者它可能意味着
True,如果所有元素
True,或者
True如果该数组有非0的长度,只是说出三种可能性。
由于不同的用户可能有不同的需求和不同的假设,因此
NumPy开发人员拒绝猜测,而是决定每当尝试在布尔上下文中评估数组时就引发
ValueError。应用于and两个
numpy数组将导致两个数组在布尔上下文中求值(通过
__bool__在Python3或
__nonzero__Python2中调用)。
你的原始代码
mask = ((r["dt"] >= startdate) & (r["dt"] <= enddate))selected = r[mask]
看起来很正确。但是,如果确实需要and,则可以
a and b使用
(a-b).any()或代替
(a-b).all()。



