比较NumPy数组的两个(嵌套)列表/元组

时间:2015-07-27 20:21:17

标签: python arrays numpy tuples

我们假设我有两种嵌套结构:

[(array, (array, array, array)), (array, (array, array, array))]

里面所有有趣的数据都是NumPy数组。比较两个这样的数据结构最简单的方法是什么?我可以单独索引和比较每个相应的数组,但这是很多索引和输入。

如果有一种简单的方法可以“吞下”所包含数组中的所有数字并将它们“明确地”序列化为一个N​​umPy数组,那么生成的数组很容易比较。我主要想检查两个这样的数组是否相等(==np.allclose())。我通过在整个事物周围抛出一个np.array但是只将最外面的列表转换为NumPy数组来天真地尝试这样做。

2 个答案:

答案 0 :(得分:1)

要使用np.allclose,您需要自己的比较功能。

def compare(a, b):
    if isinstance(a, (list, tuple)) and isinstance(b, type(a)):
        for aa, bb in zip(a, b):
            if not compare(aa, bb):
                return False  # Short circuit
        return True
    else:  # numpy arrays
        return numpy.allclose(a, b)

当然,您可以获得更多的幻想(例如,将kwargscompare传递到allclose)并且您的输入检查可能会更加强大,但这应该会给您一般想法......

答案 1 :(得分:0)

这是https://stackoverflow.com/a/31662874/865169的略微修改,试图过滤出a和b不是同一类型的情况,即在我们试图检查的意义上不具有可比性:

def compare(a, b):
    if not isinstance(b, type(a)):
        raise TypeError('The two input objects must be of same type')
    else:
        if isinstance(a, (list, tuple)):
            for aa, bb in zip(a, b):
                if not compare(aa, bb):
                    return False  # Short circuit
            return True
        else:  # numpy arrays
            return np.allclose(a, b)