Laut Handbuch vergleicht numpy.testing.assert_array_equal
NaN ( np.nan
) miteinander, aber es sollte nicht funktionieren.
** Die Ursache stellte sich heraus, dass es nicht wie erwartet funktioniert, wenn dtype`` object
ist (wenn es sich um ein gemischtes ndarray handelt) **
Linux-Betriebssystem (Details nicht bestätigt) Conda-Version Python v3.7 und 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.
Bei einem normalen Vergleich ist der Vergleich zwischen NaNs "False", aber "assert_array_equal" vergleicht sie als gleich. Wenn es sich jedoch um ein Array von "float" handelt.
>>> 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)
>>>
Der Grund für die Angabe von "dtype" beim Erstellen von "a" und "b" ist, dass es sich ansonsten um ein Array von Zeichenfolgen handelt. Für diese Arrays, die als Typ "Objekt" erstellt wurden, schlägt "assert_array_equal" jetzt fehl.
>>> 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