如何为np.recarray添加具体的类型注释?



我在文件scratch.py中有以下代码:

import numpy as np
def my_array(arr: np.recarray) -> None:
print(arr.x)
my_array(np.rec.array([(1.0, 2), (3.0, 4)], dtype=[('x', '<f8'), ('y', '<i8')]))

运行mypy scratch.py --disallow-any-generics会出现以下错误:

scratch.py:3: error: Missing type parameters for generic type "recarray"  [type-arg]

但是,下面的代码消除了上面的错误:

def my_array(arr: np.recarray[Any, Any]) -> None:
print(arr.x)

,但我更喜欢更具体的类型,如:

def my_array(arr: np.recarray[np.dtype[[('x', float), ('y', int)]]]) -> None:
print(arr.x)

但是我还没有想出如何正确地做到这一点。

from typing import Union
import numpy as np
def my_array(arr: np.recarray[Union[float, int], np.dtype[Union[np.float_, np.int_]]]) -> None:
print(arr.x)
my_array(np.rec.array([(1.0, 2), (3.0, 4)], dtype=[('x', '<f8'), ('y', '<i8')]))

通过了支票,但我不知道为什么。

from typing import Union
import numpy as np
def my_array(arr: np.recarray[Union[float, int], np.dtype[Union[np.float_, np.int_]]]) -> None:
print(arr.x)
my_array(np.rec.array([(1.0, 2), (3.0, 4)], dtype=[('x', '<f8'), ('y', '<i8')]))

相关内容

  • 没有找到相关文章

最新更新