我开始尝试在Python中使用类型提示,我遇到了一些可选可调用类型的问题。这可能很容易解决,但我不确定如何解决。
例如,我在问题中附加的函数。
from typing import Callable, Optional
import numpy as np
def running_mean(
xx: np.ndarray,
yy: np.ndarray,
bins: np.ndarray,
kernel: Optional[Callable[[np.ndarray], np.ndarray]] = None,
) -> np.ndarray:
# if there is no input kernel function fall to default (which is a gausian kenrnel)
weight_func = kernel
if kernel is None:
_width = (xx.max() - xx.min()) / 10
weight_func = lambda x: np.exp(-((x) ** 2) / (2 * _width**2)) * (
np.abs(x / _width) < 2
)
smoothed = np.array([np.average(yy, weights=weight_func(xx - x)) for x in bins])
return smoothed
我想用这个函数来计算一些输入数据的运行均值。运行均值的权重是通过核函数计算的。我希望这个函数是可选的,所以如果用户没有提供任何东西,它将使用高斯核。
但是,我的IDE(Visual Studio Code)突出显示了这一行:
smoothed = np.array([np.average(yy, weights=weight_func(xx - x)) for x in bins])
这个错误:
类型为“None”的对象不能被调用Pylance(reportOptionalCall)
(变量)weight_func:((x:未知)-〉任何)|((ndarray)-〉ndarray)|无
我的问题是:我怎样才能表明<weight_func>不能再是None类型?
任何建议都欢迎!
1条答案
按热度按时间vhmi4jdf1#
首先不要将其设置为
None
: