将浮点数乘以 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,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.linspace。”

,

哇,里面有很多。

友好提示 - 提供堆栈跟踪可以更轻松地为您提供帮助,就像将代码缩减为仅重要部分一样。

对于您的实际问题 -

mod 是 map(modFunc,d)

map 返回一个列表,所以 mod = [...,...] 然后 kaa = (pi) * mod

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

这没有多大意义。你可能也想要一张那里的地图?