Ino*_*non 47 numpy type-hinting strong-typing multidimensional-array python-3.5
有没有人为特定的numpy.ndarray类实现了类型提示?
现在,我正在使用打字.但是,如果有更具体的内容会更好.
例如,如果numpy人为其array_like对象类添加了一个类型别名.更好的是,在dtype级别实现支持,以便支持其他对象,以及ufunc.
Jas*_*sha 84
Numpy 1.21 包含一个numpy.typing具有泛型类型的模块NDArray。
Run Code Online (Sandbox Code Playgroud)numpy.typing.NDArray = numpy.ndarray[typing.Any, numpy.dtype[+ScalarType]]的通用版本
np.ndarray[Any, np.dtype[+ScalarType]]。可在运行时用于输入具有给定数据类型和未指定形状的数组。
例子:
Run Code Online (Sandbox Code Playgroud)>>> import numpy as np >>> import numpy.typing as npt >>> print(npt.NDArray) numpy.ndarray[typing.Any, numpy.dtype[+ScalarType]] >>> print(npt.NDArray[np.float64]) numpy.ndarray[typing.Any, numpy.dtype[numpy.float64]] >>> NDArrayInt = npt.NDArray[np.int_] >>> a: NDArrayInt = np.arange(10) >>> def func(a: npt.ArrayLike) -> npt.NDArray[Any]: ... return np.array(a)
截至 2022 年 9 月 5 日,根据numpy/numpy#16544 ,对形状的支持仍在进行中。
hpa*_*ulj 18
它看起来像typing模块开发于:
https://github.com/python/typing
主numpy存储库位于
https://github.com/numpy/numpy
可以跟踪Python错误和提交
添加功能的常用方法是分叉主存储库,开发功能直到它是防弹的,然后提交拉取请求.显然,在流程的各个阶段,您需要其他开发人员的反馈.如果你不能自己进行开发,那么你必须说服其他人这是一个有价值的项目.
cython有一种注释形式,用于生成有效的C代码.
您引用了文档中的array-like段落numpy.请注意其typing信息:
一个简单的方法来确定是否可以使用array()将对象转换为numpy数组只是以交互方式尝试它并查看它是否有效!(Python方式).
换句话说,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)
Run Code Online (Sandbox Code Playgroud)
对于你自己的函数,注释就像
def foo(x: np.ndarray) -> np.ndarray:
Run Code Online (Sandbox Code Playgroud)
作品.当然,如果你的函数最终调用了一些numpy传递其参数的函数asanyarray(尽可能多),这样的注释将是不完整的,因为你的输入可能是a list,或np.matrix等等.
在评估此问题和答案时,请注意日期.484当时是一个相对较新的PEP,并且仍在开发中使用它来编写标准Python的代码.但看起来提供的链接仍然有效.
在我的公司,我们一直在使用:
from typing import TypeVar, Generic, Tuple, Union, Optional
import numpy as np
Shape = TypeVar("Shape")
DType = TypeVar("DType")
class Array(np.ndarray, Generic[Shape, DType]):
"""
Use this to type-annotate numpy arrays, e.g.
image: Array['H,W,3', np.uint8]
xy_points: Array['N,2', float]
nd_mask: Array['...', bool]
"""
pass
def compute_l2_norm(arr: Array['N,2', float]) -> Array['N', float]:
return (arr**2).sum(axis=1)**.5
print(compute_l2_norm(arr = np.array([(1, 2), (3, 1.5), (0, 5.5)])))
Run Code Online (Sandbox Code Playgroud)
我们实际上有一个 MyPy 检查器来检查形状是否有效(我们应该在某个时候发布)。唯一的问题是它不会让 PyCharm 高兴(即你仍然会收到令人讨厌的警告线):
签出DataShape。它使用数据类型以及一些语法来确定输入和输出数组的大小。
| 归档时间: |
|
| 查看次数: |
13706 次 |
| 最近记录: |