我有两个NumPy数组,并且想要测试它们是否相等。
下面的代码可以正确地实现:
如果其中一个内部数组是不规则的,则比较会失败:
下面的代码可以正确地实现:
# this works
x = np.array([np.array(['a', 'b']), np.array(['c', 'd'])], dtype='object')
y = np.array([np.array(['a', 'b']), np.array(['c', 'd'])], dtype='object')
assert np.testing.assert_array_equal(x,y)
如果其中一个内部数组是不规则的,则比较会失败:
# this works
x = np.array([np.array(['a', 'b']), np.array(['c'])], dtype='object')
y = np.array([np.array(['a', 'b']), np.array(['c'])], dtype='object')
np.testing.assert_array_equal(x,y)
Traceback (most recent call last):
File "/home/.../test.py", line 12, in <module>
np.testing.assert_array_equal(x,y)
File "/home/.../lib/python3.9/site-packages/numpy/testing/_private/utils.py", line 932, in assert_array_equal
assert_array_compare(operator.__eq__, x, y, err_msg=err_msg,
File "/home/.../lib/python3.9/site-packages/numpy/testing/_private/utils.py", line 842, in assert_array_compare
raise AssertionError(msg)
AssertionError:
Arrays are not equal
Mismatched elements: 1 / 1 (100%)
x: array([array(['a', 'b'], dtype='<U1'), array(['c'], dtype='<U1')],
dtype=object)
y: array([array(['a', 'b'], dtype='<U1'), array(['c'], dtype='<U1')],
dtype=object)
更新:
为了让故事更加晦涩,以下内容也可以正常工作:
x = np.array([np.array(['a', 'b']), np.array(['c'])], dtype='object')
y = x
np.testing.assert_array_equal(x,y)
这是正确的行为吗?
x==y
(如果出现错误,则显示回溯信息)。 - hpauljx2 = x
然后运行np.testing.assert_array_equal(x,x2)
,它会通过测试。但是,如果你重新初始化 x 为相同的不规则数组,则np.testing.assert_array_equal(x,x2)
将失败。 - convolutionBoy