为何numpy.testing.assert_array_equal对相同嵌套ragged数组校验失败
你遇到的是NumPy的正常设计行为,核心原因与object类型数组的元素比较逻辑有关,具体解释如下:
1. 不同场景的行为差异原因
- 普通等长内部数组校验通过:当内部数组形状一致时,
np.testing.assert_array_equal对object元素执行==比较会返回布尔数组,工具会自动判断该布尔数组是否全为True,因此内容一致时会判定相等。 - ragged数组校验失败:当内部数组形状不一致时,两个不同数组对象执行
==比较会触发广播错误,NumPy的校验工具捕获到该异常后会直接判定两个元素不相等,因此即使打印内容完全一致也会抛出断言错误。 - 引用赋值后校验通过:如果两个数组的元素是同一个对象引用,校验工具会优先用
is做身份判断,身份一致时直接返回相等,不会触发后续的值比较逻辑,因此不会报错。
2. 适配ragged数组的校验方案
如果你需要对嵌套的ragged object数组做内容相等校验,可以改用逐元素调用np.array_equal的方式实现:
x = np.array([np.array(['a', 'b']), np.array(['c'])], dtype='object') y = np.array([np.array(['a', 'b']), np.array(['c'])], dtype='object') # 逐元素校验内容相等 assert all(np.array_equal(x_item, y_item) for x_item, y_item in zip(x, y))
内容的提问来源于stack exchange,提问作者Angelo
相关产品推荐
相关产品推荐

