歩いたら休め

なんでこんな模様をしているのですか?

numpyの型ヒントをnptypingで付けよう

stackoverflowのNumpy type hints in Python (PEP 484)という記事で nptyping というライブラリが紹介されていました。

import numpy as np
from nptyping import Array

def foo(array: Array[np.float64]) -> str:
    ...

また、shapeも含めて指定できるようです。ただし、現時点でmypyなどでshapeも含めてチェックすることはできず、あくまで実行時にisinstanceでチェックする、もしくは可読性のための記述するために用いるようです。

arr = np.array([[1.0, 2.0],
                [3.0, 4.0],
                [5.0, 6.0]])
isinstance(arr, Array[np.float64, 3, 2])  # True

具体的な記述方法については、同様の調査を行っている記事が既にありました。

qiita.com

結論からいうと、mypyを用いたnumpy.ndarrayの型ヒントチェックはnumpy-stubsを用いれば可能。

ただし、現(2020年1月)時点ではndarrayのdtype, shapeを指定してのmypyチェックはできない。

一方、dtype, shapeを含めた型ヒントを可読性のためのアノテーションとしてつけたいというのであれば、nptypingを用いるという選択肢がよさそう。

関連記事