1. ホーム
  2. python

[解決済み] ある数値が任意の型のint(coreまたはnumpy、signedまたはnot)であるかどうかを判断するにはどうすればよいですか?

2023-01-17 14:14:18

質問

ある変数が以下の型であるかどうかをテストする必要があります。 int であるか、あるいは np.int* , np.uint* のように、できれば単一の条件 ( すなわち no or ).

いくつかのテストの後、私はそれを推測します。

  • isinstance(n, int) にのみマッチします。 intnp.int32 (または np.int64 を使用します)。
  • np.issubdtype(type(n), int) は全てにマッチするようです。 intnp.int* とは一致しませんが np.uint* .

このことから、次の2つの疑問が生まれます。 np.issubdtype 任意の 符号付きintの種類は?ある数値が符号付き整数か符号なし整数かを一回のチェックで判断できますか?

のテストについてです。 整数 をテストする場合、テストは False を返すはずです。

どのように解決するのですか?

NumPyは、Pythonの型ではなく、サブタイプチェックのために使える/使うべきベースクラスを提供しています。

使用方法 np.integer を使って、符号付き整数と符号なし整数のいずれかのインスタンスをチェックします。

使用する np.signedintegernp.unsignedinteger で符号付きか符号なしかをチェックします。

>>> np.issubdtype(np.uint32, np.integer)
True
>>> np.issubdtype(np.uint32, np.signedinteger)
False
>>> np.issubdtype(int, np.integer)
True

すべての浮動小数点数、複素数型は False を返します。

np.issubdtype(np.uint*, int) は常に False というのは、Python の int は符号付き型だからです。

これらすべての基本クラス間の関係を示す便利なリファレンスが、ドキュメントにあります。 にあります。 .