基本上,代码给出了错误:
TypeError: only size-1 arrays can be converted to Python scalars
在两行中
我正在寻找其他函数来处理数组,但没有任何作用
pulse = np.array((-1/(math.sqrt(2*pi)/(dev **3))) * term)
pulse = pulse*np.array(math.exp((-0.500/dev**2)*term ** 2)) # the error happens here
由于表达式:math.exp((-0.500/dev ** 2)*term**2)
spectrum = w*math.exp(-1*w*mean)*math.exp(-1 * w ** 2 * (dev ** 2 / 2)) # here the same error
答案 0 :(得分:1)
如注释中所述,数学函数math.exp
在标量数字上起作用,因此当您将数组传递给它们时,它们将失败。您可能要使用numpy等效函数。
通常,numpy足够全面,因此无需使用任何数学函数。请参见下面的代码,其中定义了一个简单数组,以及 numpy 和 math 中两个 exp 函数的行为:
import math
import numpy as np
a1 = np.array([1,2,3])
ea1 = np.exp(a1)
ea2 = math.exp(a1)
在上面的代码中使用np.exp
时,您将获得一个数组:
array([2.71828183,7.3890561,20.08553692])
在上面的代码中使用math.exp
时,会出现以下错误:
TypeError:只有大小为1的数组可以转换为Python标量
因此,当您使用如下所示的numpy函数时,您的代码将起作用:
pulse = -1/(np.sqrt(2*pi)/(dev **3)) * term
pulse = pulse * np.exp((-0.500/dev**2)*term ** 2)
spectrum = w * np.exp(-1*w*mean) * np.exp(-1 * w ** 2 * (dev ** 2 / 2))