繁体   English   中英

Numpy的分段函数

[英]Numpy's Piecewise Function

考虑这段代码:

from numpy import *
from pylab import *

#set up constants
v_f = 4.6e5
l = 1.e-9
c = 3.0e8
g = 4*2*pi
mu_B = 9.27e-24
hbar = 1.05e-34
m = 9.e-31
alpha = v_f*hbar
e = 1.6e-19
eps = 8.85e-12 #epsilon_0
B = arange(2.5, 37.5, 2.5) #magnetic field
beta = g*mu_B*B/2
A = (16*e**2)/(hbar*eps)
k = arange(10000., 60000., 5.)
n = 1.
w = c*2*pi*k/n

def E2_func(w, beta):
    return A*((hbar*w)**2*((hbar*w)**2 + (2*beta)**2))/((hbar*w)**2 - (2*beta)**2)**2

for b in beta:
    E2 = piecewise(w, [w <= 2*b/hbar, w > 2*b/hbar], [0, lambda w: E2_func(w, b)])
    E2_alt = piecewise(w, [w <= 2*b/hbar, w > 2*b/hbar], [0, E2_func(w, b)])
    subplot(121)
    plot(w, E2)
    subplot(122)
    plot(w, E2_alt)

show()

我把所有这些常量放在那里,这样你就可以复制代码,运行程序并查看输出 - 抱歉,我没有足够的声誉点来发布输出图像。

从y轴上的刻度和曲线本身来看,很明显这两个分段函数之间的输出存在差异:为什么? 看起来lambda函数在这里起作用,但我不明白为什么会这样。 任何见解都表示赞赏。

您的以下行有错误:

E2_alt = piecewise(w, [w <= 2*b/hbar, w > 2*b/hbar], [0, E2_func(w, b)])

[0, E2_func(w, b)]是你的旅行者。 它应该包含函数或标量,但E2_func(w, b)是一个包含10000个元素的数组。

您的E2第一个版本为w每个元素调用lambda函数,其中条件列表为true。 您的E2_alt第二个版本设置第一个元素,其中条件为E2_func(w, b)[0] ,第二个为E2_func(w, b)[1] ,依此类推。

以下工作:

E2_alt = piecewise(w, [w <= 2*b/hbar, w > 2*b/hbar], [0, E2_func(w, b)[where(w > 2*b/hbar)]])

但是为了便于使用,函数列表应该只是标量或函数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM