web-dev-qa-db-ja.com

numpy dtypeが不可欠かどうかを確認するにはどうすればよいですか?

Numpy dtypeが不可欠かどうかを確認するにはどうすればよいですか?私は試した:

issubclass(np.int64, numbers.Integral)

しかし、それはFalseを与えます。


更新:Trueが表示されるようになりました。

28
Neil G

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に登録されるようにする予定です。

44
Robert Kern

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
14
user4815162342

以前の回答とコメントを基に、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)
3
Johann

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
0
CT Zhu

ユースケースに応じて、ダックタイピング

import operator
int = operator.index(number)

私の意見では良い方法です。さらに、具体的な特別なことは何も必要ありません。

唯一の欠点は、場合によってはそれをtry/exceptする必要があることです。

0
seberg