Python 中的 Numpy 类型提示 (PEP 484)

Posted

技术标签:

【中文标题】Python 中的 Numpy 类型提示 (PEP 484)【英文标题】:Numpy type hints in Python (PEP 484) 【发布时间】:2019-03-21 05:18:06 【问题描述】:

我想将类型提示添加到将 numpy 数组作为输入并返回字符串的方法。这个 numpy 数组包含浮点数,所以我尝试了:

import numpy as np
def foo(array: np.ndarray[np.float64]) -> str:

但由于TypeError: 'type' object is not subscriptable,它不起作用。

我找到了this,但无法关注讨论!

【问题讨论】:

看起来该链接是一个仍在开发中的实验包。你看过内置的typing 库吗? ***.com/questions/35673895/… 是我几年前给出的答案。 484 类型提示当时是实验性的,并且可能仍然是。还有***.com/questions/38005633/… 现在在 numpy github 存储库中有一个开放的issue,关于 numpy 类型的类型提示/注释。 【参考方案1】:

查看nptyping。它为 numpy 数组提供类型提示。

在你的情况下,你最终会得到:

from nptyping import NDArray, Float64

def foo(array: NDArray[Float64]) -> str:
    ...

您也可以检查您的实例:

import numpy as np
from nptyping import NDArray, Float64

arr = np.array([[1.0, 2.0],
                [3.0, 4.0],
                [5.0, 6.0]])

isinstance(arr, NDArray[(3, 2), Float64])  # True.

# Or if you don't want to check the dimensions and their sizes:
isinstance(arr, NDArray[Float64])  # Also True.

【讨论】:

项目状态? 它还活着。不过最近没有任何功能请求或错误报告。 如果还可以看到ndarray 方法(例如argmaxshape、.. 在这个项目中支持/连接到 mypy 会很棒,也就是说,如果我写 arr: NDArray[(3, 1), Any] = np.array([[1.0, 2.0], [3.0, 4.0]]) 我会通过 mypy 得到类型错误。 同样,PyCharm 无法将 NDArray 连接到 np.ndarray

以上是关于Python 中的 Numpy 类型提示 (PEP 484)的主要内容,如果未能解决你的问题,请参考以下文章

PEP 484 类型提示 -- Python官方文档译文 [原创]

Python PEP 484 类型提示 -> 返回类型是类名还是无?

python 3.5代码中的变量需要类型注释

Python 3.6 泛型类型提示

python中的函数注释

带有存根的子类的 Python 2.7 类型提示