保存したnumpy
のデータ,いくつかあったときに同じものだったかな~?と
曖昧な時に,そのnumpy
のデータを比べて,まるっきり同じものかどうか調べたい
それでまず練習で以下をやってみた.
>>> import numpy as np >>> a=np.array([1,2,3]) >>> b=np.array([1,2,3]) >>> a==b array([ True, True, True]) >>> a=np.array([[1,2],[1,2]]) >>> b=np.array([[1,2],[1,2]]) >>> a==b array([[ True, True], [ True, True]]) >>> type(a==b) <class 'numpy.ndarray'> >>> if a == b: ... print("True") ... else: ... print("False") ... Traceback (most recent call last): File "<stdin>", line 1, in <module> ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
上記の通り,単純にa==b
でTrue
(aとbは同じデータ)を返すわけではなく,
要素ごとに比較して新たに作成されたnumpy
のデータ型が返されます.
>>> [j for i in a==b for j in i if j != True] == [] True >>> if [j for i in a==b for j in i if j != True] == []: ... print("True") ... else: ... print("False") ... True
なので,その返却されるnumpy
のデータ型の中にFalse
が一つでもあれば
異なるデータであることが分かるので上記のようにリスト内包表記を使って
確かめてみました.
う~む,もっとスマートなやり方はないか...
また,サイズが違うもので比較すると以下のようになります.
>>> a=np.array([1,2]) >>> b=np.array([[1,2,3],[5,6,7]]) >>> a==b __main__:1: DeprecationWarning: elementwise comparison failed; this will raise an error in the future. False
上記の場合に[j for i in a==b for j in i if j != True] == []
を行うと,
当然ではありますが,TypeError: 'bool' object is not iterable
になります.
比較するもののサイズが分からない時はtry:~except TypeError:~
で対処といったところかぁ.