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

numpy数组与nan与标量的不等式比较

贡和裕
2023-03-14
问题内容

我试图将数组的成员设置为小于nan的阈值。这是QA / QC过程的一部分,传入数据可能已经具有nan插槽。

例如,我的阈值可能是-1000,因此我想在以下数组中将-3000设置为nan

x = np.array([np.nan,1.,2.,-3000.,np.nan,5.])

以下内容:

x[x < -1000.] = np.nan

产生正确的行为,但也会产生RuntimeWarning,但会产生禁用警告的开销

warnings.filterwarnings("ignore")
...
warnints.resetwarnings()

有点沉重,可能有点不安全。

尝试使用花式索引进行两次索引如下所示不会产生任何效果:

nonan = np.where(~np.isnan(x))[0]
x[nonan][x[nonan] < -1000.] = np.nan

我认为这是因为复制是由于整数索引或两次使用索引而产生的。

有谁有一个相对简单的解决方案?在此过程中使用带掩码的数组会很好,但是最终产品必须是ndarray,我不能介绍新的依赖项。谢谢。


问题答案:

!=将NaN与非NaN值进行任何比较(除之外)将始终返回False:

>>> x < -1000
array([False, False, False,  True, False, False], dtype=bool)

因此,您可以简单地忽略数组中已经存在NaN的事实,然后执行以下操作:

>>> x[x < -1000] = np.nan
>>> x
array([ nan,   1.,   2.,  nan,  nan,   5.])

编辑 当我执行以上操作时,我没有看到任何警告,但是如果您确实需要远离NaN,则可以执行以下操作:

mask = ~np.isnan(x)
mask[mask] &= x[mask] < -1000
x[mask] = np.nan


 类似资料:
  • 问题内容: 对于我的单元测试,我想检查两个数组是否相同。简化示例: 这是行不通的,因为。最好的进行方法是什么? 问题答案: 或者您可以使用或用: 编辑 由于您正在使用它进行单元测试,因此裸露(而不是将其包装成get )可能更自然。

  • 问题内容: 要求“比较应为或”。 但是,如果我遵循此规则,则会得到不同/错误的结果。为什么? 问题答案: 该建议仅适用于测试值的“真实性”的语句。是另一种野兽。 请注意,这始终是因为是数组而不是布尔值,并且执行简单的引用相等性测试(例如,仅;例如)。

  • 是否有一种惯用的方法来比较两个NumPy数组,它们将NaN视为彼此相等(但不等于NaN以外的任何东西)。 例如,我希望以下两个数组比较相等: 和以下两个数组进行比较: 我正在寻找一种可以产生标量布尔结果的方法。 以下方法可以做到这一点: 但它很笨重,并且创建了所有这些中间数组。 有没有一种方法可以更容易地观察眼睛,更好地利用记忆? 另外,如果有帮助的话,已知数组具有相同的形状和数据类型。

  • JavaScript 有两种方式判断两个值是否相等。 等于操作符 等于操作符由两个等号组成:== JavaScript 是弱类型语言,这就意味着,等于操作符会为了比较两个值而进行强制类型转换。 "" == "0" // false 0 == "" // true 0 == "0"

  • 我仍在学习这方面的诀窍,但我正在尝试为HashMap实现一个比较器,以便使用compareTo对键进行排序。为了使比较器与equals保持一致,我想尝试从compareTo获取int结果,看看它是否等于0。如果是,请检查对象是否相等。我遇到的问题是,如果对象不相等,会发生什么?我必须归还什么?

  • 我有一个Numpy数组如下: 并希望使用np.greater将每行中的“向量”与其他行进行比较,以便: 但是如果我尝试它会将中的每个数字与中的每个其他数字进行比较,因此: 如何使外部比较行明智而不是元素明智?