类型提示 2D numpy 数组

Posted

技术标签:

【中文标题】类型提示 2D numpy 数组【英文标题】:Type hint 2D numpy array 【发布时间】:2021-06-13 20:21:45 【问题描述】:

作为this question 的后续行动,我有一个函数将返回固定列但可变行的二维numpy.array

import numpy.typing as npt

def example() -> npt.ArrayLike:
    data = np.array([[1,2,3],
                     [4,5,6],
                     ...,
                     [x,y,z]])

我怎样才能明确提示返回的数组将是 3 列 by N(变量)行?

【问题讨论】:

这能回答你的问题吗? Type hinting / annotation (PEP 484) for numpy.ndarray Numpy Typing 文档没有说明可能的尺寸。所以也许你目前不能轻易。但是,使用Python new type,您也许可以实现自定义解决方案。取决于你想对类型提示做什么,我猜。 那里有一个答案,指定了numpy数组的形状... @SamuelNLP,在添加 numpy 输入模块之前,该链接是多年前被询问的。我不得不在接受的答案中添加一个很大的免责声明,因为人们一直不赞成。坚持参考当前的numpy 发展。 【参考方案1】:

目前(2021 年 3 月 16 日)似乎无法对 numpy.ndarray 的形状(或数据类型)进行类型提示。但是,最近有一些针对 numpy 的拉取请求正在朝着这个目标努力。

https://github.com/numpy/numpy/pull/17719

使np.ndarray 类通用w.r.t。它的形状和数据类型:np.ndarray[~Shape, ~DType]

但是,该 PR 的一个明确非目标是为 numpy.ndarray 创建运行时可下标别名。根据该 PR,这些更改将在以后的 PR 中出现。

https://github.com/numpy/numpy/issues/16544

讨论对形状的键入支持的问题。在撰写本文时它仍然开放。


nptyping package 可以做到这一点,但这不是 numpy 的一部分。

from typing import Any
from nptyping import NDArray

# Nx3 array with Any data type.
NDArray[(Any, 3), Any]

【讨论】:

以上是关于类型提示 2D numpy 数组的主要内容,如果未能解决你的问题,请参考以下文章

如何将numpy数组存储为tfrecord?

将文本文件读入结构化 2D numpy 数组

NumPy 类型提示某事物既是数组又是 float32? [复制]

如何将 2D float numpy 数组转换为 2D int numpy 数组?

评估 numpy.radians 和浮点/数组输入元素的类型提示

python使用numpy中的diagonal函数获取2D numpy数组的对角线元素使用numpy中的diagonal函数和sum函数获取2D numpy数组的迹(matrix trace)