由于数组中的问题,此代码未运行

时间:2019-04-25 15:45:26

标签: python python-3.x numpy

基本上,代码给出了错误:

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

1 个答案:

答案 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))