我们假设我有两种嵌套结构:
[(array, (array, array, array)), (array, (array, array, array))]
里面所有有趣的数据都是NumPy数组。比较两个这样的数据结构最简单的方法是什么?我可以单独索引和比较每个相应的数组,但这是很多索引和输入。
如果有一种简单的方法可以“吞下”所包含数组中的所有数字并将它们“明确地”序列化为一个NumPy数组,那么生成的数组很容易比较。我主要想检查两个这样的数组是否相等(==
或np.allclose()
)。我通过在整个事物周围抛出一个np.array
但是只将最外面的列表转换为NumPy数组来天真地尝试这样做。
答案 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)
当然,您可以获得更多的幻想(例如,将kwargs
从compare
传递到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)