首页 > 解决方案 > Python 函数适用于标量,但不适用于向量,并给我错误“只有 size-1 数组可以转换为 Python 标量”

问题描述

我是python新手,对matlab有一些背景。我正在尝试为均值为 0 的高斯核编写函数。这是我的代码:

import numpy as np
import math

def GaussainKernel(x,sigma):
    xx = np.array(x)
    return 1/(np.sqrt(2*math.pi*sigma**2))*math.exp(-(xx*xx)/(2*sigma**2))

如果传递 sigma 和 x 的标量,则此方法有效,例如:

GaussainKernel(1, 1)

给了我答案:

0.24197072451914337

现在,如果我想为 x 传递一个向量,例如:

x = np.array([0,1,2])
GaussainKernel(x, 1)

我收到以下错误:

TypeError: only size-1 arrays can be converted to Python scalars

这必须是由于术语x*xx**2

任何帮助将不胜感激。

标签: pythonarraysnumpymath

解决方案


math.exp是一个 Python 函数,不将向量作为输入。替换它,np.exp一切都会按预期工作。

此外,您可能希望替换math.pinp.pi以摆脱一个导入。


推荐阅读