【发布时间】:2017-04-02 17:38:28
【问题描述】:
我有两个lists 的numpy 向量并希望确定它们是否代表大致相同的点(但可能以不同的顺序)。
我找到了诸如numpy.testing.assert_allclose 之类的方法,但它不允许可能有不同的订单。我还找到了unittest.TestCase.assertCountEqual,但这不适用于numpy 数组!
我最好的方法是什么?
import unittest
import numpy as np
first = [np.array([20, 40]), np.array([20, 60])]
second = [np.array([19.8, 59.7]), np.array([20.1, 40.5])]
np.testing.assert_all_close(first, second, atol=2) # Fails because the orders are different
unittest.TestCase.assertCountEqual(None, first, second) # Fails because numpy comparisons evaluate element-wise; and because it doesn't allow a tolerance
【问题讨论】:
-
两个输入列表中的所有数组是否都具有相同的形状(包括相同的维数)?列表中的数组数量是否相同?
-
为什么不将 first 和 second 转换为 unittest.TestCase.assertCountEqual 接受的格式?
-
@Divakar - 数组将具有相同的形状(至少,如果它们没有,那么我希望它们所属的单元测试失败!) - 不一定相同每个列表中的项目数,因为我是从作为调用传递给模拟对象的参数中获取它们的。但是,如果元素数量不同,测试应该会失败。
-
@FilipeAleixo 将它们转换为
unittest.TestCase.assertCountEqual接受的格式是什么意思?即使我确实将它们转换为元组,我也不知道如何将其更改为assertCountApproxEqual-esque 方法。 -
在 python 中
list和set意味着 2 个不同的东西。而numpy数组是另一回事。
标签: python-3.x numpy python-unittest