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

使用==比较numpy数组的规则是什么?

毛缪文
2023-03-14
问题内容

例如,尝试理解以下结果:

>>> x
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
>>> (x == np.array([[1],[2]])).astype(np.float32)
array([[ 0.,  1.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  1.,  0.,  0.,  0.,  0.,  0.,  0.,  0.]], dtype=float32)
>>> (x == np.array([1,2]))
   False
>>> (x == np.array([[1]])).astype(np.float32)
array([[ 0.,  1.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.]], dtype=float32)
>>> (x == np.array([1])).astype(np.float32)
array([ 0.,  1.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.], dtype=float32)

>>> (x == np.array([[1,3],[2]]))
False
>>>

这里发生了什么?在[1]的情况下,它将1与x的每个元素进行比较,并将结果汇​​总到一个数组中。对于[[1]],同样的事情。仅通过对repl进行试验,就很容易弄清楚特定阵列形状会发生什么。但是,双方可以具有任意形状的基本规则是什么?


问题答案:

NumPy会在比较之前尝试将两个数组广播为兼容形状。如果广播失败,则当前返回False。将来,

==如果广播或元素比较等失败,则相等运算符将来会引发类似np.equal的错误。

否则,将返回由逐元素比较产生的布尔数组。例如,由于xnp.array([1])是可广播的,因此返回形状(10,)的数组:

In [49]: np.broadcast(x, np.array([1])).shape
Out[49]: (10,)

由于xnp.array([[1,3],[2]])不可广播,False由返回x == np.array([[1,3],[2]])

In [50]: np.broadcast(x, np.array([[1,3],[2]])).shape
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-50-56e4868cd7f7> in <module>()
----> 1 np.broadcast(x, np.array([[1,3],[2]])).shape

ValueError: shape mismatch: objects cannot be broadcast to a single shape


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

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

  • 我的问题是"为什么?:" 这些数组完全相同。 我的最小示例并没有再现这一点: 这个也没有: 我不知道为什么这些不平等。还有一个额外的问题,我如何比较它们? 我需要一种有效的方法来检查aaa是否在堆栈aa中。 我没有在aa中使用

  • 比较两个NumPy数组是否相等的最简单方法是什么(其中相等定义为:A=B iff,用于所有索引i:

  • 因此,我正在编写一个数独解算器,使用9x9数组作为网格,使用9x9x9数组作为其可能性。由于我使用的回溯算法,我必须检查数独是否仍然有效,又名: 如果有一个字段不包含数字,并且没有剩余的可能性,则返回False。到目前为止,我实现了以下几点: 例如,如果(j,i)处的正方形包含选项2、3和7,则相应的可能性数组为: 我试图在求解器中避免这样的循环。我尝试如下: 这返回了一个nx9数组,其中n是我的

  • 假设我有一个对象类型MyObject,其中包含成员数据someValue和otherValue,我插入两个逻辑规则,如下所示: 我的问题是,有没有办法验证这些规则是否已针对同一个MyObject实例触发?另外,对于MyObject的一个特定实例,是否有办法知道这些规则是否已经触发了它?