- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在尝试使用两个 x0
和 y0
坐标数组中的数据来创建一个使用提供的 x0
和 的函数>y0
计算分段的一系列线段。
为此,我创建了一个函数
import numpy as np
import matplotlib.pylab as pl
def broken_line(x, x0, y0):
cl = []
fl = []
for i in range(len(x0)-1):
ab = np.polyfit(x0[i:i+2], y0[i:i+2], 1)
# Compute and append a "condition" interval
cl.append(np.logical_and(x >= x0[i], x <= x0[i+1]))
# Create a line function for the interval
fl.append(lambda x: x*ab[0] + ab[1])
return(np.piecewise(x, condlist=cl, funclist=fl))
然后为了测试它,我绘制了结果
x0 = np.array([1, 3, 5, 10])
y0 = np.array([2, 1, 5, 7])
x = np.linspace(1, 10, 30)
pl.plot(x, broken_line(x, x0, y0))
pl.plot(x0, y0)
pl.show()
然而,结果却并不如我所想。我查看了有关该主题的其他帖子,包括 this和 this other ,连同numpy.piecewise文档。但是,我无法弄清楚为什么代码没有按预期工作。看起来只考虑了 lambda 的最后一个定义。欢迎提出建议。
最佳答案
lambda 定义中的 ab
是在周围范围中定义的,因此会随着每次迭代而变化。只有最后一次迭代的 ab
值才会反射(reflect)到所有 lambda 函数中。
一种可能的解决方案是使用工厂方法来创建 lambda 函数:
import numpy as np
import matplotlib.pylab as pl
def lambda_factory(ab):
return lambda x:x*ab[0]+ab[1]
def broken_line(x, x0, y0):
cl = []
fl = []
for i in range(len(x0)-1):
ab = np.polyfit(x0[i:i+2], y0[i:i+2], 1)
# Compute and append a "condition" interval
cl.append(np.logical_and(x >= x0[i], x <= x0[i+1]))
# Create a line function for the interval
fl.append(lambda_factory(ab))
return(np.piecewise(x, condlist=cl, funclist=fl))
x0 = np.array([1, 3, 5, 10])
y0 = np.array([2, 1, 5, 7])
x = np.linspace(1, 10, 30)
pl.plot(x, broken_line(x, x0, y0))
pl.plot(x0, y0)
pl.show()
另一种解决方案是将 ab
保存在 lambda 的本地变量中,从而使用
fl.append(lambda x, ab=ab:x*ab[0]+ab[1])
在循环内。在这里,您创建了外部作用域变量 ab
的局部变量 ab
。
在这两种情况下,结果如下所示:
如需进一步引用,请参阅 python faq
关于python - 分段线性函数与 numpy.piecewise,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49047279/
我有一系列由类型级整数索引的数据类型,我以“分段”方式将它们定义为某个类型类的实例,这在尝试派生另一个类的实例时会导致问题。为了说明,我将问题隔离如下。考虑这段代码: {-# LANGUAGE Sco
在 sympy 中,如何声明一个对子函数中的多个变量具有多个限制的 Piecewise 函数? 这是我的背景和尝试: from sympy import Piecewise, Symbol, exp
我试图找到的傅里叶级数 像 simpy 一样: p = Piecewise((sin(t), 0 0) | (t < pi)), (0, (pi < t) | (t < 2*pi))), (t, 0
我正在尝试使用两个 x0 和 y0 坐标数组中的数据来创建一个使用提供的 x0 和 的函数>y0 计算分段的一系列线段。 为此,我创建了一个函数 import numpy as np import m
我正在学习关于模糊系统的类(class),我学习了 my notes在我的电脑上。这意味着我不得不时不时地在电脑上画图。由于这些图表定义明确,我觉得用 numpy 绘制它们是个好主意(我用 LaTeX
我希望从一组数据点生成一个最适合这些点的三次样条函数。 也就是说,寻求获得最适合数据的单个三阶多项式函数 - 而不是分段多项式。(最终目标是找到该函数二阶导数的最大值) 我已经尝试过scipy.int
我定义了一个分段复杂函数 import numpy as np def foo(x): return np.piecewise(x, [x>0], [np.exp(1j*x)]) 当我尝试评估
我想绘制以下累积分布函数 为此我想我可以使用 np.piecewise 如下 x = np.linspace(3, 9, 100) np.piecewise(x, [x 9], [0, float(
我的代码 我在一个较大的程序中有效地减少了以下代码片段: import sympy as sp print('sympy version:', sp.__version__) n = sp.symbo
我正在编写一个程序来进行三次样条插值。基本上,该程序将在某些间隔内拼凑三次多项式。如果可能的话,我想用piecewise[] 或其他类似的函数来绘制这个结果。 在我的代码中,我的方程在一个数组中,输出
我正在尝试使用 np.piecewise 定义一个多元分段函数,如下所示: X = np.array([ [1, 2], [3, 4], [5, 6] ]) pw = np.p
我正在尝试在 Mathematica 中绘制缓和函数的导数。它区分函数 OK,并且可以使用 % 绘制函数,但我希望能够通过将导数指定为函数 f[t_] 来绘制,然后 绘制[ f[t] , {t,-1,
我一直在尝试让 numpy.piecewise 将系数列表 {a_ij} 转换为分段三次多项式。每当我运行以下代码时, import math import numpy as np x = np.li
我想创建一个巨大的打包数据阵列,并将其保存在磁盘上。我正在使用 writePackedMessageToFd()。但是,由于输入数据非常大 (50GB),我需要将消息片段写入磁盘以释放内存。 Cap'
我正在尝试为一些数字信号处理构造一个分段函数,但我无法获得 numpy.piecewise 以允许我指定一个范围。 这里是我要输入的内容: t = np.arange(-10,10,1) x = la
我对为什么以下代码的答案是 10 而不是 1 感到困惑。有人可以帮助我了解 lambdify 发生了什么或者是什么导致了错误答案吗? import sympy from sympy.utilities
我想绘制一个分段函数,例如: import sympy as sym x = sym.symbols("x") f = sym.Piecewise((-1, x = 1)) sym.plotting.
我是一名优秀的程序员,十分优秀!