在 Python 中将浮点数乘以函数并得到不能将序列乘以类型为"float"的非整数



我用python 2.7编写了以下代码。这里我定义了两个函数,一个余弦函数和一个指数函数我需要将这些函数乘以浮点值,但我得到了这个错误。我假设我们不能将浮点值乘以list()格式的函数…如果有人告诉我该怎么做,我会很感激。提前感谢。下面是我的代码:

import numpy as np
import math
import cmath
delta  = 2.0*math.pi*1.46*((1.0/1530)-(1.0/1550))
#defining main func
def apFunc(x):
return np.exp(-4*math.log(2)*((x-(5/2))/5)**2)*(1+math.cos((2*math.pi/0.001)*x))
Domain = list(np.arange(0,5,0.001))
APF    = map(apFunc,Domain)
#defining modulation function 
def modFunc(x):
return (1+math.cos((2*math.pi/0.001)*x))
d      = list(np.arange(0,5,0.001))
mod    = map(modFunc,d)
#making sig and kaa functions
sgima  = (2*math.pi/1530)*APF
sig    = sigma + delta
kaa    = (math.pi/l1530)*mod
gamma  = math.sqrt(sig**2 + kaa**2)

坚持使用NumPy(特别是完全避免使用math/cmath)将解决您正在观察的问题,通过完全避免非广播友好的容器/操作:

import numpy as np

delta = 2.0 * np.pi * 1.46 * ((1.0 / 1530) - (1.0 / 1550))

def apFunc(x):
return np.exp(-4 * np.log(2) * ((x - (5 / 2)) / 5) ** 2) * (
1 + np.cos((2 * np.pi / 0.001) * x)
)

def modFunc(x):
return 1 + np.cos((2 * np.pi / 0.001) * x)

d = np.linspace(0.0, 5.0, 5000)
APF = apFunc(d)
mod = modFunc(d)
# making sig and kaa functions
sigma = (2 * np.pi / 1530) * APF
sig = sigma + delta
kaa = (np.pi / 1530) * mod
gamma = np.sqrt(sig ** 2 + kaa ** 2)

(我也修复了一些错别字,并清理/重新排序了一点,虽然它还没有完全符合pep8)

请注意,我已经将np.arange()的使用替换为对np.linspace()的等效调用,因为根据其文档:"当使用非整数步骤(例如0.1)时,结果通常不一致。最好使用numpy。

哇,好多呢。

友好提示-提供堆栈跟踪可以更容易地帮助您,因为可以将代码减少到只保留重要的部分。

对于你的实际问题-

mod ismap(modFunc,d)

map返回一个列表,因此mod = [..., ...]则kaa = (pi) * mod

(pi) * [..., ...]

这没什么意义。你可能也想要一张地图?

最新更新