程序员最近都爱上了这个网站  程序员们快来瞅瞅吧!  it98k网:it98k.com

本站消息

站长简介/公众号

  出租广告位,需要合作请联系站长

+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

暂无数据

ValueError:具有多个元素的数组的真值是不明确的。使用a.any()或a.all()

发布于2019-08-21 21:03     阅读(854)     评论(0)     点赞(4)     收藏(3)


我刚刚在代码中发现了一个逻辑错误,导致了各种各样的问题。我无意中做了一个按位AND而不是逻辑AND

我更改了代码:

r = mlab.csv2rec(datafile, delimiter=',', names=COL_HEADERS)
mask = ((r["dt"] >= startdate) & (r["dt"] <= enddate))
selected = r[mask]

至:

r = mlab.csv2rec(datafile, delimiter=',', names=COL_HEADERS)
mask = ((r["dt"] >= startdate) and (r["dt"] <= enddate))
selected = r[mask]

令我惊讶的是,我收到了相当神秘的错误消息:

ValueError:具有多个元素的数组的真值是不明确的。使用a.any()或a.all()

为什么在使用按位操作时没有发出类似的错误 - 我该如何解决这个问题?


解决方案


r是一个numpy(rec)数组。所以r["dt"] >= startdate也是一个(布尔)数组。对于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()



所属网站分类: 技术文章 > 问答

作者:黑洞官方问答小能手

链接:https://www.pythonheidong.com/blog/article/51214/f4240591e8164aa2c545/

来源:python黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

4 0
收藏该文
已收藏

评论内容:(最多支持255个字符)