【问题标题】:numpy array type hint multiple fieldsnumpy 数组类型提示多个字段
【发布时间】:2022-12-11 09:51:34
【问题描述】:

您如何为带有 [('reference', 'O'), ('check', '?')] 等字段的 numpy 数组键入提示(引用是一个 python 对象,检查是一个布尔值)

目前我的类型提示

np.ndarray[typing.Any, np.dtype[[('reference', 'O'), ('check', '?')]]]

不起作用,因为里面有一个列表,给出错误List expression not allowed for this type argument(Pylance)

我在这个问题上最后找到的是这个评论type hint for structured array discussion

【问题讨论】:

  • 您是否尝试过像这样的类型提示的反之亦然版本:np.ndarray[np.dtype([('reference', 'O'), ('check', '?')]), typing.Any]

标签: python numpy numpy-ndarray


【解决方案1】:

要为具有 [('reference', 'O'), ('check', '?')] 等字段的 NumPy 数组键入提示,您可以使用以下语法:

import numpy as np

np.ndarray[np.dtype([('reference', 'O'), ('check', '?')]), any]

此语法指定数组应该是具有包含指定字段的结构化数据类型的 ndarray,并且数组的元素可以是任何类型。

以下是如何使用此类型提示的示例:

import numpy as np

def foo(arr: np.ndarray[np.dtype([('reference', 'O'), ('check', '?')]), any]) -> None:
    # Do something with arr here
    pass

请注意,此类型提示仅在支持高级类型提示的最新版本的 Python 中可用,例如 Python 3.6 或更高版本。在早期版本的 Python 中,您不能使用此语法为具有结构化数据类型的 NumPy 数组键入提示。

【讨论】:

  • 你应该使用Suggestion: use np.dtype[...] instead of np.dtype(...)mypy(note)吗?即便如此,mypy 仍然抱怨使用元组而不是tuple[]
【解决方案2】:

不幸的是,我们不能指望在不久的将来以 mypy 友好的方式支持结构化数组

这是用户odashiissue(2022 年 8 月 16 日)中所说的

main numpy typing issue/discussion 的评论中列出了开发人员面临的挑战

【讨论】:

    猜你喜欢
    • 2021-06-13
    • 2021-11-10
    • 2019-06-27
    • 2021-10-29
    • 2015-11-10
    • 2019-11-08
    • 1970-01-01
    • 2019-08-26
    • 2015-10-11
    相关资源
    最近更新 更多