如何创建循环以计算条件函数

2024-04-29 10:12:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图创建一个循环,以离散值计算函数。通常情况下,这是可以的,但是,这被证明是困难的,因为我的函数是有条件的(它有一个依赖于主变量的任意分段函数)

import math
import numpy as np

for i in np.arange(4000,8000,1000):
    def f(λ,a,u,o1,o2):
        o = o1 if (λ <= u) else o2
        return a*math.exp((λ-u)^2/(-2*o^2))
    print(f(i,1.056,5998,379,310))

我希望代码在I=4000时计算函数,然后I=5000等。我收到的输出如下; TypeError:输入类型不支持ufunc“按位异或”,并且无法根据强制转换规则“安全”将输入安全强制为任何支持的类型

我似乎找不到任何具体的例子来实现这样的条件函数。另一次尝试是在没有循环的情况下进行的,但我遇到了值错误,我认为我是在评估数组,就好像它们是一个变量一样

我希望稍后对函数进行积分并绘制和。涉及循环的方法会遇到任何问题吗


Tags: 函数inimportnumpy证明类型foras
3条回答
import math
import numpy as np

def f(λ,a,u,o1,o2):
    o = o1 if (λ <= u) else o2
   return a*math.exp((λ-u)^2/(-2*o^2))

for i in np.arange(4000,8000,1000):  
  print(f(i,1.056,5998,379,310))

试试这个代码。这会奏效的

假设您的函数除了power操作符**之外是正确的,那么numpy的可能实现如下所示

# import math                           # does not work well with numpy
import numpy as np

def f(l,a,u,o1,o2):                     # change 'λ' to 'l' (it's easier to type)
    o = np.where(l <= u, o1, o2)        # vectorize piecewise definition
    return a*np.exp((l-u)**2/(-2*o**2)) # change '^' to '**' operator, use np.exp
 
x = np.arange(4000,8000,1000)           # define value range
print(f(x,1.056,5998,379,310))          # call your function one time with entire range

输出

[9.74560013e-07 3.29586202e-02 1.05597802e+00 5.68878883e-03]

要重用函数,可以将其更改为参数化版本

import numpy as np

def f(a,u,o1,o2):
    return lambda x: a*np.exp((x-u)**2/(-2*np.where(x <= u, o1, o2)**2)) 
 
x = np.arange(4000,8000,1000) 
f_p = f(1.056,5998,379,310)     # parameterize your function
print(f_p(x))                   # call the parameterized function with your value range

输出

[9.74560013e-07 3.29586202e-02 1.05597802e+00 5.68878883e-03]

Python使用**进行指数运算^bitwise xor

相关问题 更多 >