类型提示函数接受numpy数组

s5a0g9ez  于 2023-05-07  发布在  其他
关注(0)|答案(1)|浏览(166)

我很难理解为什么mypy在下面的例子中抛出错误。

import numpy as np
from typing import Sequence

def compute(x: Sequence[float]) -> bool:
    # some computation that does not modify x
    ...

compute(np.linspace(0, 1, 10))

Mypy错误:

Argument 1 to "compute" has incompatible type "ndarray[Any, dtype[floating[Any]]]"; expected "Sequence[float]"  [arg-type]

特别是,由于typing.Sequence需要可迭代性、可逆性和索引,我认为numpy数组也应该是Sequence。这是否与numpy数组是可变的,而Sequence类型是不可变的这一事实有关?我注意到当我将Sequence更改为Iterable时,问题得到了解决。但是我需要能够在compute中索引x
那么,对compute函数进行类型提示的最佳方法是什么,以便它可以接受具有可迭代性和索引的对象?

7fyelxc5

7fyelxc51#

尝试使用np.ndarray作为x的类型提示。我检查了type(np.linspace(0, 1, 10)),它返回了np.ndarray

相关问题