D'après le manuel, numpy.testing.assert_array_equal
compare NaN ( np.nan
) les uns aux autres de la même manière, mais cela ne devrait pas fonctionner.
** Il s'avère que la cause ne fonctionne pas comme prévu lorsque dtype
est ʻobject` (quand il s'agit d'un ndarray mixte) **
OS Linux (détails non confirmés) Conda version Python v3.7 et Numpy v1.8.1
$ python
Python 3.7.0 (default, Oct 9 2018, 10:31:47)
[GCC 7.3.0] :: Anaconda, Inc. on linux
Type "help", "copyright", "credits" or "license" for more information.
Dans une comparaison normale, la comparaison entre les NaN sera «False», mais «assert_array_equal» les comparera de la même manière. Cependant, s'il s'agit d'un tableau de «float».
>>> import numpy as np
>>> from numpy.testing import assert_array_equal as aae
>>> a = np.array([1, np.nan])
>>> b = np.array([1, np.nan])
>>> a.dtype
dtype('float64')
>>> b.dtype
dtype('float64')
>>> a == b
array([ True, False])
>>> aae(a, b)
>>>
La raison de la spécification de «dtype» lors de la création de «a» et «b» est qu'autrement, ce sera un tableau de chaînes.
Pour ces tableaux créés en tant que type ʻobject, ʻassert_array_equal
échoue maintenant.
>>> a = np.array([1,'test',np.nan], dtype=object)
>>> b = np.array([1,'test',np.nan], dtype=object)
>>> a.dtype
dtype('O')
>>> b.dtype
dtype('O')
>>> a == b
array([ True, True, False])
>>> aae(a,b)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File ".../anaconda3/envs/opt/lib/python3.7/site-packages/numpy/testing/_private/utils.py", line 936, in assert_array_equal
verbose=verbose, header='Arrays are not equal')
File ".../anaconda3/envs/opt/lib/python3.7/site-packages/numpy/testing/_private/utils.py", line 846, in assert_array_compare
raise AssertionError(msg)
AssertionError:
Arrays are not equal
Mismatched elements: 1 / 3 (33.3%)
x: array([1, 'test', nan], dtype=object)
y: array([1, 'test', nan], dtype=object)
>>>
Recommended Posts