1. ホーム
  2. python

[解決済み] numpy.ndarrayのタイプヒンティング/アノテーション(PEP 484)

2022-08-03 01:22:11

質問

誰か特定の numpy.ndarray クラスに対して型ヒンティングを実装した人はいますか?

今現在、私は typing.Any を使っていますが、もっと具体的なものがあればいいですね。

例えば、NumPyの人が 型のエイリアスを を追加したとする。 配列のような オブジェクトクラスで使用することができます。よりよい方法は dtype レベルでサポートを実装し、他のオブジェクトがサポートされるようにし、さらに ufunc .

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

更新情報

最近のnumpyのバージョンをチェックし、新しい typing モジュール

https://numpy.org/doc/stable/reference/typing.html#module-numpy.typing

日付入り回答

以下のように見えます。 typing モジュールが開発されました。

https://github.com/python/typing

メインとなる numpy リポジトリは

https://github.com/numpy/numpy

Python のバグとコミットは、次の場所で追跡できます。

http://bugs.python.org/

機能を追加する通常の方法は、メインリポジトリをフォークして、その機能が爆速になるまで開発し、プルリクエストを提出することです。明らかに、プロセスのさまざまな時点で、他の開発者からのフィードバックが必要です。 もし自分で開発できないのであれば、それが価値あるプロジェクトであることを他の誰かに納得してもらう必要があります。

cython にはアノテーションの形式があり、それを使って効率的な C のコードを生成します。


あなたが参照した array-like の段落を numpy のドキュメントを参照してください。 その typing の情報に注意してください。

<ブロッククオート

array()を使ってオブジェクトをnumpyの配列に変換できるかどうかを調べる簡単な方法は、単に対話的に試してみて、それがうまくいくかどうかを確認することです! (The Python Way)です。

言い換えれば numpy の開発者たちは、釘を刺されることを拒否しているのです。 彼らは、どのような種類のオブジェクトを np.ndarray .

In [586]: np.array({'test':1})   # a dictionary
Out[586]: array({'test': 1}, dtype=object)

In [587]: np.array(['one','two'])  # a list
Out[587]: 
array(['one', 'two'], 
      dtype='<U3')

In [589]: np.array({'one','two'})  # a set
Out[589]: array({'one', 'two'}, dtype=object)

独自の関数については、以下のようなアノテーションを使用します。

def foo(x: np.ndarray) -> np.ndarray:

が動作します。 もちろん、もしあなたの関数が最終的にいくつかの numpy を通して引数を渡すような asanyarray を通して引数を渡すような関数の場合 (多くの場合そうです)、 このような注釈は不完全なものになります。 list であったり、あるいは np.matrix など。


この質問と回答を評価するとき、日付に注意してください。 484は当時は比較的新しいPEPで、標準的なPythonでそれを利用するコードはまだ開発中でした。 しかし、提供されたリンクはまだ有効であるように見えます。