详细内容或原文请订阅后点击阅览
使用numpy阵列类型提示做更多的事情:注释和验证形状&dtype
通过完整的通用规范改进静态分析和运行时验证该帖子使用numpy阵列类型提示进行更多:注释和验证形状和DTYPE首先出现在数据科学上。
来源:走向数据科学数组对象可以采用许多具体表单。它可能是一个布尔值的一维(1D)阵列,或者是8位未签名整数的三维(3D)阵列。正如内置函数isInstance()所示,每个数组都是np.ndarray的实例,无论形状或存储在数组中的元素类型,即dtype。同样,许多类型通知的接口仍然只指定NP.NDARRAY:
isInstance()
np.ndarray
dtype
导入numpy作为npdef进程(x:np.ndarray,y:np.ndarray,) - > np.ndarray:...
这种类型的注释不足:大多数接口对传递数组的形状或dtype都有很高的期望。如果通过3D阵列,则大多数代码将失败,或者在预期的浮子数组中传递一数组的日期。
现在可以完全指定通用np.ndarray,数组形状和dtype特征的充分优势:
def过程(x:x:np.ndarray [tuple [int],np.dtype [np.bool_]],y:np.ndarray [tuple [tuple [int,int,int],np.dtype [np.uint8]]
有了这样的详细信息,最近的静态分析工具(例如Mypy和Pyright)甚至在运行代码之前就可以找到问题。此外,运行时验证器专门用于Numpy,例如staticframe的SF.CallGuard,可以重新使用相同的注释来进行运行时验证。
mypy
Pyright
staticframe
sf.callguard
Python中的通用类型
通用内置容器(例如列表和dict)可以通过指定每个接口的类型来使其具体。一个函数可以声明其列出列表的列表[str];或者可以用dict [str,bool]指定str的dict of str。
列表
dict
str
列表[str]
bool
dict [str,bool]
通用np.ndarray
元组
np.dtype
形状类型参数
np.empty
np.full
(10,)
(10,100,1000)
元组[int]
元组[int,int,int]
元组[int,...]
字面
dtype类型参数
np.datetime64
np.uint8
np.float64
np.bool_
np.integer
np.inexact
np.number
制作np.ndarray混凝土
一维阵列的布尔值:
CallGuard
检查
警告