假设我有两个以下类型的嵌套结构:
[(array, (array, array, array)), (array, (array, array, array))]
里面所有有趣的数据都是 NumPy 数组。比较两个这样的数据结构的最简单方法是什么?我可以分别对每个相应的数组进行索引和比较,但这需要大量的索引和输入。
如果有一种简单的方法可以“吞下”包含的数组中的所有数字并将它们明确地“序列化”到一个 NumPy 数组中,那么生成的数组将很容易进行比较。我主要感兴趣的是检查两个这样的数组是否相等(==
或 np.allclose()
)。我曾经天真地尝试通过在整个事物周围抛出一个 np.array
来这样做,但这只会将最外层的列表转换为 NumPy 数组。
最佳答案
要使用 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
)并且您的输入检查可能更多健壮,但这应该给你一般的想法......
关于python - 比较 NumPy 数组的两个(嵌套)列表/元组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31662528/