этот код не работает из-за проблем в массивах - PullRequest
0 голосов
/ 25 апреля 2019

В основном код выдает ошибку:

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 Ответ

1 голос
/ 25 апреля 2019

Как отмечается в комментариях, математические функции math.exp работают со скалярными числами, поэтому, когда вы передаете им массивы, они не будут работать.Возможно, вы захотите использовать numy эквивалентные функции.

В общем, numpy достаточно всеобъемлющий, чтобы исключить необходимость использования любой математической функции.См. Код ниже, где определяется простой массив и как ведет себя каждая из двух exp функций в numpy и math :

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: в скаляры Python могут быть преобразованы только массивы размера 1

Итак, ваш код будет работать при использовании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)) 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...