分段函数
Piecewise functions
我是 python 的新手,想知道为什么我不能绘制如下所示的分段函数,以及为什么会弹出错误消息?
def get_data(self, frame):
self.ydata =np.piecewise(self.xdata, [self.xdata<.2, self.xdata>=.2][ np.sin((self.frequency) * self.xdata +
frame), np.sin((5*self.frequency) * self.xdata + frame)])
它说我的错误是
line 72, in get_data
frame), np.sin((5*self.frequency) * self.xdata + frame)])
TypeError: list indices must be integers or slices, not tuple
我想我的问题也可能是我会将分段函数绑定到什么?这是一个动画,我正在为我第二次尝试的变量分段执行此操作,但我不知道如果我想要 x<.2 我应该放什么 'x' 因为我的 x 值处于排列设置中。
我不确定问题中的 self 是什么。我下面的代码作为一个函数工作,但如果需要可以更改为一个方法。
您的错误信息是条件列表和函数列表之间没有逗号引起的。
def get_data(self, frame):
self.ydata =np.piecewise(self.xdata, [self.xdata<.2, self.xdata>=.2] # Must be a comma here
[ np.sin((self.frequency) * self.xdata + frame),
np.sin((5*self.frequency) * self.xdata + frame) ] )
另一个问题是函数列表必须是函数,而不是函数的结果。
import numpy as np
def get_data(xdata, frame):
def f_lt(x):
return np.sin( frequency * x + frame)
def f_ge(x):
return np.sin( 5*frequency * x + frame)
return np.piecewise(xdata, [xdata<.2, xdata>=.2], [ f_lt, f_ge ])
frequency = 1.0
xdata = np.arange(1,26)/25
get_data(xdata, 0.1)
# array([ 0.13954311, 0.17902957, 0.21822962, 0.25708055, 0.89120736,
# 0.96355819, 0.99749499, 0.99166481, 0.94630009, 0.86320937,
# 0.74570521, 0.59847214, 0.42737988, 0.23924933, 0.04158066,
# -0.15774569, -0.35078323, -0.52983614, -0.68776616, -0.81827711,
# -0.91616594, -0.97753012, -0.99992326, -0.98245261, -0.92581468])
我不确定你要做什么,所以我无法测试结果,但也许这有帮助。
编辑: 回复评论。
get_data(x, frame)
可以根据需要随时调用。
扩展参数列表可能会更好,使其更加灵活。这真的取决于你想做什么。
def get_data(xdata, frame, frequency, step_point=0.2 ):
def f_lt(x):
return np.sin( frequency * x + frame)
def f_ge(x):
return np.sin( 5*frequency * x + frame)
return np.piecewise(xdata,
[xdata<step_point, xdata>=step_point],
[ f_lt, f_ge ])
None 函数中的参数现在是硬编码的。每次调用函数时都可以设置它们。
for frame in range(100):
frame = frame / 100
y = get_data(xdata, frame, frequency, 0.2)
do_plot(xdata, y)
这是否回答了您的评论?
我是 python 的新手,想知道为什么我不能绘制如下所示的分段函数,以及为什么会弹出错误消息?
def get_data(self, frame):
self.ydata =np.piecewise(self.xdata, [self.xdata<.2, self.xdata>=.2][ np.sin((self.frequency) * self.xdata +
frame), np.sin((5*self.frequency) * self.xdata + frame)])
它说我的错误是
line 72, in get_data
frame), np.sin((5*self.frequency) * self.xdata + frame)])
TypeError: list indices must be integers or slices, not tuple
我想我的问题也可能是我会将分段函数绑定到什么?这是一个动画,我正在为我第二次尝试的变量分段执行此操作,但我不知道如果我想要 x<.2 我应该放什么 'x' 因为我的 x 值处于排列设置中。
我不确定问题中的 self 是什么。我下面的代码作为一个函数工作,但如果需要可以更改为一个方法。
您的错误信息是条件列表和函数列表之间没有逗号引起的。
def get_data(self, frame):
self.ydata =np.piecewise(self.xdata, [self.xdata<.2, self.xdata>=.2] # Must be a comma here
[ np.sin((self.frequency) * self.xdata + frame),
np.sin((5*self.frequency) * self.xdata + frame) ] )
另一个问题是函数列表必须是函数,而不是函数的结果。
import numpy as np
def get_data(xdata, frame):
def f_lt(x):
return np.sin( frequency * x + frame)
def f_ge(x):
return np.sin( 5*frequency * x + frame)
return np.piecewise(xdata, [xdata<.2, xdata>=.2], [ f_lt, f_ge ])
frequency = 1.0
xdata = np.arange(1,26)/25
get_data(xdata, 0.1)
# array([ 0.13954311, 0.17902957, 0.21822962, 0.25708055, 0.89120736,
# 0.96355819, 0.99749499, 0.99166481, 0.94630009, 0.86320937,
# 0.74570521, 0.59847214, 0.42737988, 0.23924933, 0.04158066,
# -0.15774569, -0.35078323, -0.52983614, -0.68776616, -0.81827711,
# -0.91616594, -0.97753012, -0.99992326, -0.98245261, -0.92581468])
我不确定你要做什么,所以我无法测试结果,但也许这有帮助。
编辑: 回复评论。
get_data(x, frame)
可以根据需要随时调用。
扩展参数列表可能会更好,使其更加灵活。这真的取决于你想做什么。
def get_data(xdata, frame, frequency, step_point=0.2 ):
def f_lt(x):
return np.sin( frequency * x + frame)
def f_ge(x):
return np.sin( 5*frequency * x + frame)
return np.piecewise(xdata,
[xdata<step_point, xdata>=step_point],
[ f_lt, f_ge ])
None 函数中的参数现在是硬编码的。每次调用函数时都可以设置它们。
for frame in range(100):
frame = frame / 100
y = get_data(xdata, frame, frequency, 0.2)
do_plot(xdata, y)
这是否回答了您的评论?