当前位置: 首页 > 面试题库 >

题否定numpy布尔数组python tilde一元运算符

胡禄
2023-03-14
问题内容

应该是一个简单的问题,但我无法在任何地方找到答案。~python中的运算符被记录为按位反转运算符。精细。我注意到,看似精神分裂的行为:

~True -> -2
~1 -> -2
~False -> -1
~0 -> -1
~numpy.array([True,False],dtype=int) -> array([-2,-1])
~numpy.array([True,False],dtype=bool) -> array([False,True])

在前4个示例中,我可以看到python正在实现(如所记录)~x = -(x+1)即使 输入 是boolean ,其输入也被视为int
。因此,对于标量布尔值,~不被视为逻辑取反。并不是说在使用int类型的布尔值定义的numpy数组上,行为是相同的。

为什么~然后在布尔数组上用作逻辑求反运算符(还请注意:~numpy.isfinite(numpy.inf) -> True?)?

我必须not()在标量上使用,但是not()对否定数组无效,这非常烦人。然后对于数组,我必须使用~,但是~将不能使标量取反…


问题答案:

not是通过__nonzero__特殊方法实现的,该方法需要返回TrueFalse,因此无法给出所需的结果。而是~使用通过__not__特殊方法实现的运算符。出于相同的原因,&|用来代替andor

PEP
335
旨在允许布尔运算符的重载,但由于开销过大而被拒绝(例如,使if语句复杂化)。
PEP
225建议了“按元素”运算符的通用语法,这将提供更通用的解决方案,但已被推迟。看来,目前的局势虽然尴尬,但不足以迫使人们改变。

np.isfinite在标量上调用时返回的类型值np.bool_不是boolnp.bool_也是从bool
dtype数组中提取标量值时得到的类型。如果你使用np.True_np.False_到位的TrueFalse你会得到下一致的行为~



 类似资料:
  • 2.4.3 布尔代数运算定律* 将实际问题所涉及的条件表达成布尔表达式,并且能对布尔表达式进行演算,这是程序员必须具备的重要能力。前面介绍的逻辑运算符用于表达各种复杂条件,下面介绍用于布尔 表达式演算、推导的一些运算定律。 我们不加证明地罗列一些布尔代数中常用的定律如下,其中 a、b、c 代表任意布尔表 达式。为了不与赋值符号=和比较运算符==混淆,我们用<=>来表示左右相等。 (1)a and

  • 前言 上个礼拜介绍了Shell编程范例之数值运算,对 Shell 下基本数值运算方法做了简单的介绍,这周将一起探讨布尔运算,即如何操作“真假值”。 在 Bash 里有这样的常量(实际上是两个内置命令,在这里我们姑且这么认为,后面将介绍),即 true 和 false,一个表示真,一个表示假。对它们可以进行与、或、非运算等常规的逻辑运算,在这一节,我们除了讨论这些基本逻辑运算外,还将讨论Shell编

  • 概述 布尔运算符用于将表达式转为布尔值,一共包含四个运算符。 取反运算符:! 且运算符:&& 或运算符:|| 三元运算符:?: 取反运算符(!) 取反运算符是一个感叹号,用于将布尔值变为相反值,即true变成false,false变成true。 !true // false !false // true 对于非布尔值,取反运算符会将其转为布尔值。可以这样记忆,以下六个值取反后为true,其他值都

  • 这是我在StackOverflow上的第一个问题,因此我想以前有人在这里问过,但是我在搜索栏中键入的所有内容都给了我不同的问题。(或者有时根本没有结果!) 我正在学习w3Schools,但我看到了这个看似简单的代码片段,它引发了一小部分问题: 本质上,守则说: 在这种特殊情况下,“test”在成功时返回字符串,在失败时返回(布尔)FALSE。 以下是在我心中激起的问题。 > 至于条件/if语句开头

  • 我被一件简单的事情困住了。我有一个名为“tags”的布尔值数组能够通过布尔值访问数组的每个元素对我来说很重要: 我传入trackTags数组并将布尔值赋给它(比如说[true,true,true,false])。因此,当我调用trackTags[0]时,我得到了“true”但是,当我打印“Energy”(能量)时,它应该与trackTags(0)相同,该值始终为false。我知道booleans

  • 问题内容: 如何在numpy数组上执行“输入”操作?(如果给定的numpy数组中存在元素,则返回True) 对于字符串,列表和字典,该功能直观易懂。 这是将其应用于numpy数组时得到的结果 问题答案: 您可以比较的输入数组,这将跨最后两个轴上每个位置的所有元素与第二个数组中对应位置的元素进行比较。这将产生一个匹配的布尔数组,在该数组中,我们检查最后两个轴上的匹配,最后检查是否匹配,就像这样- 样