python-3.x - 为什么多条件掩码失败?
问题描述
假设我有一个 numpy 数组X
、其中的一个元素x
和一个名为dx
. 我想创建一个掩码来观察y
该元素周围的值,所以我这样做:
for x in X:
window = (x-dx/2 <= X <= x+dx/2)
for y in Y[window]:
...
为什么第二行失败?
如果我使用window = (x-dx/2 <= X) & (X <= x+dx/2)
它,但它的可读性较差。window = np.logical_and(x-dx/2 <= X, X <= x+dx/2)
在处理大型数组时也可以使用它来提高性能,而且可读性更差。
解决方案
诸如这样的表达式x < y < z
分两步进行评估:
- 首先
(x < y).__bool__()
是评估。如果返回True
,则转到步骤 2,如果返回,False
则为。如果它返回任何其他内容,则引发 a。也可能引发某种异常。x < y < z
False
TypeError
(x < y).__bool__()
- 如果
(x < y).__bool__()
返回True
,则y < z
评估。在这种情况下, 的值x < y < z
与 相同y < z
。同样,可能会引发异常。
x
如果或y
是具有多个元素numpy
的数组,则问题出现在步骤 1 中。开发人员认为没有“好的”方法可以将具有多个元素的数组转换为单个值,因此他们决定不让您通过raise 一个.numpy
bool
ndarray.__bool__()
ValueError
注意:由于上述评估顺序,您可以在该位置放置一个numpy
数组z
,例如:
>>> 1 < 2 < np.arange(5)
array([False, False, False, True, True])
推荐阅读
- ios - 如何在 iOS 中预览多个 PDF 文件,类似于 WhatsApp 上传文档功能?
- android - 隐藏列表视图标题的一部分(文本)
- string - 批处理文件帮助:根据文件名将文件分类到特定命名的文件夹中,但有例外
- android - 如何在 Android/Java 中更改 PayU 的依赖活动工具栏背景颜色?
- excel - 如何使用公式在 excel 中查找条件偏移的值?
- php - PHP:更新 PHP 版本后缺少 JSON 支持
- swift - 快速获取表格视图单元格值为零
- c - free() 在这种情况下如何工作?
- excel - 需要密码才能在 excel 365 中共享/发送电子邮件
- laravel - Laravel 7 Spatie 返回相同的角色