Numpy dtypeが不可欠かどうかを確認するにはどうすればよいですか?私は試した:
issubclass(np.int64, numbers.Integral)
しかし、それはFalse
を与えます。
更新:True
が表示されるようになりました。
Numpyには、クラス階層に類似したdtypeの階層があります(スカラー型には、実際にはdtype階層を反映する真のクラス階層があります)。 np.issubdtype(some_dtype, np.integer)
を使用して、dtypeが整数のdtypeかどうかをテストできます。ほとんどのdtypeを消費する関数と同様に、np.issubdtype()
は引数をdtypeに変換するため、np.dtype()
コンストラクターを介してdtypeを作成できるものであれば何でも使用できます。
http://docs.scipy.org/doc/numpy/reference/arrays.dtypes.html#specifying-and-constructing-data-types
>>> import numpy as np
>>> np.issubdtype(np.int32, np.integer)
True
>>> np.issubdtype(np.float32, np.integer)
False
>>> np.issubdtype(np.complex64, np.integer)
False
>>> np.issubdtype(np.uint8, np.integer)
True
>>> np.issubdtype(np.bool, np.integer)
False
>>> np.issubdtype(np.void, np.integer)
False
Numpyの将来のバージョンでは、スカラー型が適切なnumbers
ABCに登録されるようにする予定です。
np.int64
はdtypeではなく、a Python=タイプです。実際のdtype(配列のdtype
フィールドを通じてアクセス)がある場合、あなたが発見したnp.typecodes
辞書を利用してください:
my_array.dtype.char in np.typecodes['AllInteger']
np.int64
などのタイプしかない場合は、まずそのタイプに対応するdtypeを取得してから、上記のようにクエリします。
>>> np.dtype(np.int64).char in np.typecodes['AllInteger']
True
以前の回答とコメントを基に、Pythonの組み込みissubclass()
メソッドとtype
モジュールでdtype
オブジェクトのnumbers
属性を使用することにしました。
import numbers
import numpy
assert issubclass(numpy.dtype('int32').type, numbers.Integral)
assert not issubclass(numpy.dtype('float32').type, numbers.Integral)
17行目ですか?
In [13]:
import numpy as np
A=np.array([1,2,3])
In [14]:
A.dtype
Out[14]:
dtype('int32')
In [15]:
isinstance(A, np.ndarray) #A is not an instance of int32, it is an instance of ndarray
Out[15]:
True
In [16]:
A.dtype==np.int32 #but its dtype is int32
Out[16]:
True
In [17]:
issubclass(np.int32, int) #and int32 is a subclass of int
Out[17]:
True
ユースケースに応じて、ダックタイピング
import operator
int = operator.index(number)
私の意見では良い方法です。さらに、具体的な特別なことは何も必要ありません。
唯一の欠点は、場合によってはそれをtry
/except
する必要があることです。