Cor*_*mer 22 python numpy type-hinting
作为这个问题的后续,我有一个函数将返回numpy.array固定列但可变行的二维
import numpy.typing as npt
def example() -> npt.ArrayLike:
data = np.array([[1,2,3],
[4,5,6],
...,
[x,y,z]])
Run Code Online (Sandbox Code Playgroud)
我如何具体提示返回的数组将是3由N(变量)行组成的列?
Jak*_*kub 22
2022 年 10 月 24 日更新
目前这仍然不可能,但根据Numpy GitHub 问题上的评论,一旦 mypy 支持PEP 646,这将是可能的。请参阅mypy 的 GitHub repo 上的相关问题。该问题在撰写本文时尚未解决。
Python 3.11 今天发布,支持 PEP646。一旦 mypy 支持 PEP646,用户将能够输入提示 Numpy 数组的形状。
较旧的答案
numpy.ndarray此时(2022 年 9 月 13 日)似乎无法对 a 的形状(或数据类型)进行类型提示。然而,最近有一些针对 numpy 的拉取请求正在努力实现这一目标。
https://github.com/numpy/numpy/pull/17719
使
np.ndarray类具有其形状和数据类型的通用性:np.ndarray[~Shape, ~DType]
然而,该 PR 的一个明确的非目标是为numpy.ndarray. 根据该 PR,这些更改将在以后的 PR 中出现。
https://github.com/numpy/numpy/issues/16544
讨论对形状的打字支持的问题。在撰写本文时它仍然开放。
PEP 646与此相关,并已被 Python 3.11 接受。根据numpy/numpy Issue #16544,在 mypy 等类型检查器添加对 PEP 646 的支持后,我们将能够对数组的形状和数据类型进行类型提示。
这可以通过nptypingpackage来完成,但这不是 numpy 的一部分。
from typing import Any
from nptyping import NDArray
# Nx3 array with Any data type.
NDArray[(Any, 3), Any]
Run Code Online (Sandbox Code Playgroud)