【问题标题】:Comparing nested numpy arrays比较嵌套的 numpy 数组
【发布时间】:2021-01-02 17:28:19
【问题描述】:

我正在尝试比较两个相同的嵌套 numpy 数组:

In [1]: a1 = np.array([np.array([1, 1, 1]), np.array([2, 2, 2]), np.array([3])], dtype=object)         
In [2]: a2 = np.array([np.array([1, 1, 1]), np.array([2, 2, 2]), np.array([3])], dtype=object)         

我看到here,为了比较两个 dtype 对象数组,我需要使用 numpy.equal() 和关键字参数 dtype=numpy.object。

In [3]: e = np.equal(a1, a2, dtype=object)                                                             
In [4]: e                                                                                              
Out[4]: 
array([array([ True,  True,  True]), array([ True,  True,  True]),
       array([ True])], dtype=object)

但是,e.all 引发了异常:

In [5]: e.all()                                                                                        
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-129-afa4ead28930> in <module>
----> 1 e.all()

/usr/local/lib/python3.8/dist-packages/numpy/core/_methods.py in _all(a, axis, dtype, out, keepdims)
     55 
     56 def _all(a, axis=None, dtype=None, out=None, keepdims=False):
---> 57     return umr_all(a, axis, dtype, out, keepdims)
     58 
     59 def _count_reduce_items(arr, axis):

ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

如何比较这些数组?

【问题讨论】:

    标签: python arrays numpy


    【解决方案1】:

    您可以将它们堆叠起来,然后检查all:

    np.hstack(e).all()
    #True
    

    【讨论】:

      【解决方案2】:

      Alternatlivley,主要是为了演示问题,错误是什么意思:

      而不是做:

      e.all()
      

      您可以到达每个元素以检查所有内容

      all(arr.all() for arr in e.tolist())
      

      因为您有一个包含更多数组的数组,而不是 ndarray(矩阵),所以内置 all 将每个数组视为布尔值,这就是导致您的错误的原因..

      再次,我没有检查时间,可能是另一个答案更快,但我主要是为了解释......

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-03-13
        • 2018-12-03
        • 1970-01-01
        • 2017-12-19
        • 1970-01-01
        • 2021-06-02
        • 2020-01-17
        相关资源
        最近更新 更多