'and'(布尔值)与 '&'(按位) - 为什么列表与 numpy 数组的行为存在差异?

2023-12-02

如何解释列表与 NumPy 数组上布尔运算和按位运算的行为差异?

我对正确使用感到困惑& vs and在 Python 中,如以下示例所示。

mylist1 = [True,  True,  True, False,  True]
mylist2 = [False, True, False,  True, False]

>>> len(mylist1) == len(mylist2)
True

# ---- Example 1 ----
>>> mylist1 and mylist2
[False, True, False, True, False]
# I would have expected [False, True, False, False, False]

# ---- Example 2 ----
>>> mylist1 & mylist2
TypeError: unsupported operand type(s) for &: 'list' and 'list'
# Why not just like example 1?

>>> import numpy as np

# ---- Example 3 ----
>>> np.array(mylist1) and np.array(mylist2)
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
# Why not just like Example 4?

# ---- Example 4 ----
>>> np.array(mylist1) & np.array(mylist2)
array([False,  True, False, False, False], dtype=bool)
# This is the output I was expecting!

这个答案 and 这个答案帮助我理解了这一点and是一个布尔运算,但是是按位运算。

我读到按位运算为了更好地理解这个概念,但我正在努力使用这些信息来理解我上面的 4 个例子。

示例 4 引导我得到了我想要的输出,所以这很好,但我仍然对何时/如何/为什么应该使用感到困惑and vs &。为什么列表和 NumPy 数组在使用这些运算符时表现不同?

谁能帮助我理解布尔运算和按位运算之间的区别,以解释为什么它们以不同的方式处理列表和 NumPy 数组?


and测试两个表达式是否符合逻辑True while &(当与True/False值)测试两者是否都是True.

在Python中,空的内置对象通常被视为逻辑上的False而非空内置函数在逻辑上是True。这有助于常见的用例,即如果列表为空,您想要执行某些操作,如果列表不为空,则执行其他操作。请注意,这意味着列表 [False] 在逻辑上是True:

>>> if [False]:
...    print('True')
...
True

因此,在示例 1 中,第一个列表非空,因此逻辑上True,所以真值and与第二个列表相同。 (在我们的例子中,第二个列表是非空的,因此逻辑上True,但识别这一点将需要不必要的计算步骤。)

例如 2,列表不能以按位方式进行有意义的组合,因为它们可以包含任意不同的元素。可以按位组合的东西包括:真值和假值、整数。

相比之下,NumPy 对象支持矢量化计算。也就是说,它们允许您对多条数据执行相同的操作。

示例 3 失败,因为 NumPy 数组(长度 > 1)没有真值,因为这可以防止基于向量的逻辑混淆。

示例 4 只是一个矢量化位and手术。

底线

  • 如果您不处理数组并且不执行整数的数学操作,您可能想要and.

  • 如果您有想要组合的真值向量,请使用numpy with &.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

'and'(布尔值)与 '&'(按位) - 为什么列表与 numpy 数组的行为存在差异? 的相关文章

随机推荐

  • 异步函数中的变量范围

    我已经构建了返回一些变量的函数 但我的函数异步使用另一个函数 function getVariable var myVariable asyncronousFunction function myVariable return myVari
  • 比较同一文档的两个字段[重复]

    这个问题在这里已经有答案了 我正在尝试查询一个巨大的 mongo 集合 其中包含大约 50 百万条记录 在 mongo 查询中 我只需要几个字段 文档中存在的对象 ID 和 MD5 为此 我做了 Query db getCollection
  • Android动画不重复

    我正在尝试制作会重复多次 或无限 的简单动画 看起来android repeatCount不起作用 这是我的动画资源 res anim first animation xml
  • 将字符串传递给python中的文件打开函数

    我有一个用户输入 我想将其作为打开函数的文件名参数传递 这是我尝试过的 filename input Enter the name of the file of grades file open filename r 当用户输入的是open
  • PHP 字符串替换

    我有字符串 var 我需要在其中替换一些文本 第一个 X 需要替换为 A 第二个 X 需要替换为B等等 下面是一个例子 我尝试过str replace但这行不通 Thanks 你可以使用preg replace s limit只替换一次的说
  • 如何在AWS S3中添加缓存控制?

    我已通过 s3cmd 命令将 20000 个文件移动到 AWS S3 现在我想为所有图像添加缓存控制 jpg 这些文件位于 s3 bucket name images 如何通过 s3cmd 为所有图像添加缓存控制或者是否有其他方法来添加标头
  • Facebook Like Box 无法在 Ember 应用程序上加载

    我试图让类似的框在我们的 ember 应用程序中工作 在一个名为的模板中about 问题是 如果我从另一条路线进入 ember 应用程序 而不是about路线 然后导航至about路线与link to助手 则不会呈现类似框 相反 如果我输入
  • Dagger 2.0 - AppEngine - gradle 配置

    我正在尝试在 AppEngine 项目中从 Dagger 1 2 2 迁移到 Dagger 2 0 1 NOT安卓一 使用 Dagger 1 2 2 很简单 compile com squareup dagger dagger compil
  • 在 iOS 中,如何使用 Xcode 从 Localized.strings 中删除语言

    这就是我的 xcode 项目的样子 我想删除英国和美国的 Localized strings 只保留英语的 Localized strings 我怎样才能做到这一点 按照下图中的说明进行操作
  • 道场声明正确的方式

    file dojo dir1 utils XmlJsonUtils js Author Rajat Khandelwal define dojo base declare declare function declare return de
  • OpenCart 管理菜单链接 url

    我对 OpenCart 很陌生 我正在尝试为其制作一个模块 我想要在管理菜单中链接到我正在创建的模块 因此我编辑了此文件 admin view template common header tpl 我添加的代码 li a class top
  • 时间:2019-03-17 标签:c#Array.FindAllIndexOfwhichFindAllIndexOf

    我知道c 有Array FindAll and Array IndexOf 有没有Array FindAllIndexOf返回int string myarr new string s f s int v myarr Select b i
  • 在 for 循环中处理“借用的值没有足够长的寿命”[重复]

    这个问题在这里已经有答案了 我正在抓取的网站要求我查询 HTML 页面的标题标签以及一些其他元素 看看我是否可以辨别文章的标题 我创建一个HashMap lt str u8 gt 并立即 insert title tag text 1 查询
  • 后台线程上的 NSTimer 回调

    我有一个NSTimer定义如下 timer NSTimer scheduledTimerWithTimeInterval 30 target self selector selector fooBar userInfo nil repeat
  • 选择以“abc”开头并以“xyz”结尾的元素

    我的页面中有一些 id 类似于 abc 1 2 3 xyz 的元素 如何在 Jquery 中选择以 abc 开头并以 xyz 结尾的元素 div id abc div id xyz 您可以使用 2 个属性选择器 div id abc id
  • 函数式接口的行为和方法参考

    当属于变量的方法的引用被销毁时会发生什么 public class Hey public double bar public Hey bar 2 0d public double square double num return Math
  • 基于定义C#更改exe图标

    我正在为两个不同的人创建一个项目 我想通过定义更改图标 例如 if customer1 add code to select c path to resources myimage1 ico for exe icon else add co
  • 如何计算列表中唯一列表的数量?

    我尝试过使用 Counter 和 itertools 但由于列表不可获取 因此它们不起作用 我的数据如下所示 1 2 3 2 3 4 1 2 3 我想知道列表 1 2 3 出现两次 但我不知道如何做到这一点 我正在考虑将每个列表转换为一个元
  • 如何在SQL Server中进行增量计数

    我被分配了一个问题 我不确定如何在 SQL Server 版本 5 8 中解决 这是简单的查询及其输出 Select location date time Item sold From Product Location Date time
  • 'and'(布尔值)与 '&'(按位) - 为什么列表与 numpy 数组的行为存在差异?

    如何解释列表与 NumPy 数组上布尔运算和按位运算的行为差异 我对正确使用感到困惑 vs and在 Python 中 如以下示例所示 mylist1 True True True False True mylist2 False True