为什么(3.3 == np.asarray([3.3]))等于[True]而不是False?

时间:2018-06-14 12:47:33

标签: python unit-testing numpy testing

以下语句在我的测试中通过。

self.assertEqual(3.3, np.asarray([3.3]))

其中一种是numpy.float64,另一种是numpy.ndarray,我的假设是此测试会失败,但会通过。

以下语句打印[ True]

print(3.3 == np.asarray([3.3]))

进一步调试显示assertEquals最终调用unittest.case.TestCase#_baseAssertEqual,使用==检查相等性:

if not first == second:
        standardMsg = '%s != %s' % _common_shorten_repr(first, second)
        msg = self._formatMessage(msg, standardMsg)
        raise self.failureException(msg)

有人可以解释为什么以及测试self.assertEqual(3.3, np.asarray([3.3]))如何通过?

编辑:如果您将一个值的数组与变量进行比较,以及此行为记录在哪里,==如何工作?

2 个答案:

答案 0 :(得分:1)

正如numpy docs about ndarrays

中所述
  

ndarrays上的算术和比较操作定义为   元素操作,通常产生ndarray对象   结果。

对ndarrays的==操作返回另一个ndarray,而不是一个布尔TrueFalse

这对于数据处理非常有用,但它与几乎所有其他python对象都不同,A == B将返回一个简单的布尔值。

答案 1 :(得分:0)

Python中,可以在特定类型上添加多个__eq__方法,以使其与另一种方法相媲美。可能用numpy.ndarray完成某种操作。

在检查a == b的情况下,它会转换为a.__eq__(b)。如果a的类型已为__eq__的类型实施b方法比较,则可将其与==进行比较。

来源:https://docs.python.org/3/reference/datamodel.html#object.eq