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

与布尔numpy数组VS PEP8 E712的比较

孙熠彤
2023-03-14
问题内容

PEP8 E712要求“比较True应为if cond is True:if cond:”。

但是,如果我遵循此规则,则会PEP8得到不同/错误的结果。为什么?

In [1]: from pylab import *

In [2]: a = array([True, True, False])

In [3]: where(a == True)
Out[3]: (array([0, 1]),)
# correct results with PEP violation

In [4]: where(a is True)
Out[4]: (array([], dtype=int64),)
# wrong results without PEP violation

In [5]: where(a)
Out[5]: (array([0, 1]),)
# correct results without PEP violation, but not as clear as the first two imho. "Where what?"

问题答案:

该建议仅适用于if测试值的“真实性”的语句。numpy是另一种野兽。

>>> a = np.array([True, False]) 
>>> a == True
array([ True, False], dtype=bool)
>>> a is True
False

请注意,这a is True始终False是因为a是数组而不是布尔值,并且is执行简单的引用相等性测试(例如,仅True is TrueNone is not True例如)。



 类似资料:
  • 基本上,我正在尝试使用Numpy数组的布尔表达式,例如: 这将返回一个错误 ValueError:包含多个元素的数组的真值不明确。使用a.any()或a.all() 正确的编码方法是什么?

  • 我正在制作一个输血游戏。我有2个数组列表。一个有献血者的血型和姓名,第二个有接受者的血型和姓名。所有的名字我都会得到用户的输入并将它们存储在一个数组中(接受者数组列表更大)。 我不知道如何使用布尔2D数组将两个数组列表进行比较(应该返回true或false)。例如,在所有捐赠者和接受者输入姓名和血型后,程序应该告诉他们是否匹配。 我知道下面的代码是错误的,但我不知道怎么做。

  • 问题内容: 我试图将数组的成员设置为小于nan的阈值。这是QA / QC过程的一部分,传入数据可能已经具有nan插槽。 例如,我的阈值可能是-1000,因此我想在以下数组中将-3000设置为nan 以下内容: 产生正确的行为,但也会产生RuntimeWarning,但会产生禁用警告的开销 有点沉重,可能有点不安全。 尝试使用花式索引进行两次索引如下所示不会产生任何效果: 我认为这是因为复制是由于整

  • 我很好奇如何比较这些数组,请记住这是一个示例,它不限于 4 个数组,因为这可能或多或少取决于用户选择) 最终目标是根据上述所有数组的比较/验证,获得一个具有真值或假值的新数组,仅当所有 4 个数组在该索引位置都有一个真值时,才应设置一个真值,如果它们是否为假值,例如: 希望我解释得正确。

  • 问题内容: 有没有一种有效的Numpy机制,可以根据条件为true而不是布尔掩码数组来检索数组中位置的整数索引? 例如: 在这种情况下,我想知道指标的地方。是否可以生成这些而不循环? 问题答案: 另外的选择: 这与。

  • 为什么与有不同的 ? 我正在使用Drools DSL,我必须实现一个规则: 我有这些DSL定义: 要求是以肯定的方式编写可重用的DSL语句,并具有否定它们的能力。