変数の型がint
か、_np.int*
_、_np.uint*
_のいずれであるかをテストする必要があります。できれば単一の条件(ieいいえor
)。
いくつかのテストの後、私はそれを推測します:
isinstance(n, int)
はint
および_np.int32
_(プレートフォームに応じて_np.int64
_)とのみ一致します。np.issubdtype(type(n), int)
はすべてのint
および_np.int*
_と一致するようですが、_np.uint*
_とは一致しません。これは2つの質問につながります:_np.issubdtype
_は、任意の種類の符号付き整数に一致しますか?数が符号付きまたは符号なし整数のいずれかの種類であるかどうかを単一のチェックで判断できますか?
これはintegersのテストに関するもので、フロートのようなものに対してはFalse
を返す必要があります。
NumPyは、Pythonタイプではなく、サブタイプのチェックに使用できる/すべきベースクラスを提供します。
_np.integer
_を使用して、符号付きまたは符号なし整数のインスタンスをチェックします。
_np.signedinteger
_および_np.unsignedinteger
_を使用して、署名された型または署名されていない型を確認します。
_>>> np.issubdtype(np.uint32, np.integer)
True
>>> np.issubdtype(np.uint32, np.signedinteger)
False
>>> np.issubdtype(int, np.integer)
True
_
すべての浮動または複素数型は、テスト時にFalse
を返します。
Python False
は符号付き型であるため、np.issubdtype(np.uint*, int)
は常にint
になります。
これらすべての基本クラス間の関係を示す便利なリファレンスは、ドキュメント here にあります。
タイプのタプルをpython isinstance()
組み込み関数に渡すことをお勧めします。np.issubtype()
に関する質問に関しては、どの種類にも一致しません整数型(int8、int32など)はすべてint
のサブクラスであるため、これらのいずれかを渡すとTrueを返します。 int
と一緒に入力します。
以下に例を示します。
_>>> a = np.array([100])
>>>
>>> np.issubdtype(type(a[0]), int)
True
>>> isinstance(a[0], (int, np.uint))
True
>>> b = np.array([100], dtype=uint64)
>>>
>>> isinstance(b[0], (int, np.uint))
True
_
また、より一般的なアプローチとして(特定のタイプのみを一致させたい場合は適切ではありません)、np.isreal()
を使用できます:
_>>> np.isreal(a[0])
True
>>> np.isreal(b[0])
True
>>> np.isreal(2.4) # This might not be the result you want
True
>>> np.isreal(2.4j)
False
_