Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为什么(3.3==np.asarray([3.3])等于[True]而不是False?_Python_Unit Testing_Numpy_Testing - Fatal编程技术网

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

Python 为什么(3.3==np.asarray([3.3])等于[True]而不是False?,python,unit-testing,numpy,testing,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\u baseAssertEqual,它使用=检查相等性: if not first == seco

下面的语句通过了我的测试

self.assertEqual(3.3, np.asarray([3.3]))
一种是
numpy.float64
另一种是
numpy.ndarray
,我的假设是该测试将失败,但它通过了

下面的语句打印
[True]

print(3.3 == np.asarray([3.3]))
调试进一步显示,
assertEquals
最终调用
unittest.case.TestCase\u baseAssertEqual
,它使用
=
检查相等性:

if not first == second:
        standardMsg = '%s != %s' % _common_shorten_repr(first, second)
        msg = self._formatMessage(msg, standardMsg)
        raise self.failureException(msg)
有人能解释一下test
self.assertEqual(3.3,np.asarray([3.3])
通过的原因和方式吗


编辑:如果将一个值的数组与一个变量进行比较,那么
==
是如何工作的?这种行为记录在哪里?

Python
中,可以在特定类型上添加几个
\ueq\uuu
方法,使其与另一个方法相比较。可能是通过
numpy.ndarray
实现的

在这种情况下,当选中
a==b
时,它将转换为
a.\uuuu eq\uuuu(b)
。如果
a
的类型已经为
b
的类型实现了
\uuuuueq\uuuuu
方法比较,则可以将它们与
=
进行比较

资料来源:

如中所述:

Ndarray上的算术和比较运算定义为 元素操作,并通常生成ndarray对象作为 结果

对ndarray的
=
操作返回另一个ndarray,而不是单个布尔值
True
False


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

但是您还没有确定此
assertEqual
传递的原因吗?正如您所说,
3.3==np.asarray([3.3])
的计算结果为
[True]
。因此,行为似乎是:如果
a==b
给出一个值,那么
assertEqual(a,b)
将通过。正如@Kevin所指出的,您似乎已经自己回答了这个问题。如果您愿意,您可以额外地通过测试,如果有mismatch@Kevin但这并不能解释为什么一个值为3.3的float64对象等于一个将值为3.3的float64作为唯一元素的ndarray,是吗?也许“为什么
3.3==np.asarray([3.3])
的计算结果不是False?”这是一个有趣而有价值的问题,在这种情况下,我觉得应该独立于围绕这个问题的提问assertEquals@M-瓦吉:因为numpy阵列使用广播。比较不应用于整个数组,而是获得一个新数组,其中比较结果应用于数组中的每个值。然后,您可以使用给出的布尔数组来执行进一步的操作。对几种
\uuuuu eq\uuuu
方法感到困惑,您能提供一个示例吗?