用python画线性函数 python线形

python 如何绘制线性函数图?import matplotlib.pyplot as plt
plt.scatter(xdata,ydata)
(xdata,ydata为两个需要作图的数据集)
如何用python表示一次函数1、点击键盘win r,打开运行窗口用python画线性函数;在窗口中输入cmd",点击确定,打开windows命令行窗口 。
2、在cmd命令行窗口中输入"python",进入python交互窗口 。
3、引入matplotlib模块用python画线性函数的pyplot()函数,并重命名为py;引入numpy模块,并重命名为np 。
4、使用函数np.arrange(start,end,step)创建变量x的取值范围,是一个一维数组 , 使用y=3*x 1 , 创建y是与自变量x相对应的一维数组 。
5、使用函数plt.plot(x , y)绘制一元一次函数y=3x 1的函数图像 。
6、使用函数plt.title()给图像添加标题,使用函数plt.xlabel()给横轴添加标签,使用函数plt.ylabel()给纵轴添加标签,使用函数plt.tick_params()设置刻度标记的大小 。
7、使用函数plt.show()显示整个一元一次函数的图像 。
Python实操:手把手教你用Matplotlib把数据画出来 作者用python画线性函数:迈克尔·贝耶勒(Michael Beyeler)
如需转载请联系华章 科技
如果已安装Anaconda Python版本 , 就已经安装好了可以使用的 Matplotlib 。否则 , 可能要访问官网并从中获取安装说明:
正如使用np作为 NumPy 的缩写,用python画线性函数我们将使用一些标准的缩写来表示 Matplotlib 的引入:
在本书中,plt接口会被频繁使用 。
让我们创建第一个绘图 。
假设想要画出正弦函数sin(x)的线性图 。得到函数在x坐标轴上0≤x<10内所有点的值 。我们将使用 NumPy 中的 linspace 函数来在x坐标轴上创建一个从0到10的线性空间,以及100个采样点:
可以使用 NumPy 中的sin函数得到所有x点的值,并通过调用plt中的plot函数把结果画出来:
用python画线性函数你亲自尝试了吗用python画线性函数?发生了什么吗?有没有什么东西出现?
实际情况是,取决于你在哪里运行脚本,可能无法看到任何东西 。有下面几种可能性:
1. 从.py脚本中绘图
如果从一个脚本中运行 Matplotlib,需要加上下面的这行调用:
在脚本末尾调用这个函数,你的绘图就会出现用python画线性函数!
2. 从 IPython shell 中绘图
这实际上是交互式地执行Matplotlib最方便的方式 。为了让绘图出现,需要在启动 IPython 后使用所谓的%matplotlib魔法命令 。
接下来 , 无须每次调用plt.show()函数,所有的绘图将会自动出现 。
3. 从 Jupyter Notebook 中绘图
如果你是从基于浏览器的 Jupyter Notebook 中看这段代码,需要使用同样的%matplotlib魔法命令 。然而,也可以直接在notebook中嵌入图形,这会有两种输出选项:
在本书中,将会使用inline选项:
现在再次尝试一下:
上面的命令会得到下面的绘图输出结果:
如果想要把绘图保存下来留作以后使用,可以直接在 IPython 或者 Jupyter Notebook 使用下面的命令保存:
仅需要确保你使用了支持的文件后缀,比如.jpg、.png、.tif、.svg、.eps或者.pdf 。
作为本章最后一个测试 , 让我们对外部数据集进行可视化,比如scikit-learn中的数字数据集 。
为此,需要三个可视化工具:
那么开始引入这些包吧:
第一步是载入实际数据:
如果没记错的话 , digits应该有两个不同的数据域:data域包含了真正的图像数据 , target域包含了图像的标签 。相对于相信我们的记忆,我们还是应该对digits稍加 探索。输入它的名字,添加一个点号,然后按Tab键:digits.TAB,这个操作将向我们展示digits也包含了一些其他的域,比如一个名为images的域 。images和data这两个域,似乎简单从形状上就可以区分 。
两种情况中,第一维对应的都是数据集中的图像数量 。然而 , data中所有像素都在一个大的向量中排列 , 而images保留了各个图像8×8的空间排列 。
因此,如果想要绘制出一副单独的图像,使用images将更加合适 。首先,使用NumPy的数组切片从数据集中获取一幅图像:
这里是从1797个元素的数组中获取了它的第一行数据,这行数据对应的是8×8=64个像素 。下面就可以使用plt中的imshow函数来绘制这幅图像:
上面的命令得到下面的输出:
此外 , 这里也使用cmap参数指定了一个颜色映射 。默认情况下 , Matplotlib 使用MATLAB默认的颜色映射jet 。然而,在灰度图像的情况下,gray颜色映射更有效 。
最后,可以使用plt的subplot函数绘制全部数字的样例 。subplot函数与MATLAB中的函数一样,需要指定行数、列数以及当前的子绘图索引(从1开始计算) 。我们将使用for 循环在数据集中迭代出前十张图像,每张图像都分配到一个单独的子绘图中 。
这会得到下面的输出结果:
关于作者:Michael Beyeler,华盛顿大学神经工程和数据科学专业的博士后,主攻仿生视觉计算模型,用以为盲人植入人工视网膜(仿生眼睛),改善盲人的视觉体验 。他的工作属于神经科学、计算机工程、计算机视觉和机器学习的交叉领域 。同时他也是多个开源项目的积极贡献者 。
本文摘编自《机器学习:使用OpenCV和Python进行智能图像处理》,经出版方授权发布 。
万字教你如何用 Python 实现线性规划想象一下,您有一个线性方程组和不等式系统 。这样的系统通常有许多可能的解决方案 。线性规划是一组数学和计算工具,可让您找到该系统的特定解,该解对应于某些其他线性函数的最大值或最小值 。
混合整数线性规划是线性规划的扩展 。它处理至少一个变量采用离散整数而不是连续值的问题 。尽管乍一看混合整数问题与连续变量问题相似,但它们在灵活性和精度方面具有显着优势 。
整数变量对于正确表示自然用整数表示的数量很重要,例如生产的飞机数量或服务的客户数量 。
一种特别重要的整数变量是二进制变量。它只能取零或一的值,在做出是或否的决定时很有用,例如是否应该建造工厂或者是否应该打开或关闭机器 。您还可以使用它们来模拟逻辑约束 。
线性规划是一种基本的优化技术,已在科学和数学密集型领域使用用python画线性函数了数十年 。它精确、相对快速 , 适用于一系列实际应用 。
混合整数线性规划允许您克服线性规划的许多限制 。您可以使用分段线性函数近似非线性函数、使用半连续变量、模型逻辑约束等 。它是一种计算密集型工具 , 但计算机硬件和软件的进步使其每天都更加适用 。
通常 , 当人们试图制定和解决优化问题时,第一个问题是他们是否可以应用线性规划或混合整数线性规划 。
以下文章说明了线性规划和混合整数线性规划的一些用例用python画线性函数:
随着计算机能力的增强、算法的改进以及更多用户友好的软件解决方案的出现,线性规划,尤其是混合整数线性规划的重要性随着时间的推移而增加 。
解决线性规划问题的基本方法称为,它有多种变体 。另一种流行的方法是 。
混合整数线性规划问题可以通过更复杂且计算量更大的方法来解决,例如,它在幕后使用线性规划 。这种方法的一些变体是,它涉及使用 切割平面 , 以及 。
有几种适用于线性规划和混合整数线性规划的合适且众所周知的 Python 工具 。其中一些是开源的,而另一些是专有的 。您是否需要免费或付费工具取决于问题的规模和复杂性,以及对速度和灵活性的需求 。
值得一提的是,几乎所有广泛使用的线性规划和混合整数线性规划库都是以 Fortran 或 C 或 C原生和编写的 。这是因为线性规划需要对(通常很大)矩阵进行计算密集型工作 。此类库称为求解器 。Python 工具只是求解器的包装器 。
Python 适合围绕本机库构建包装器,因为它可以很好地与 C/C配合使用 。对于本教程,您不需要任何 C/C(或 Fortran),但如果您想了解有关此酷功能的更多信息,请查看以下资源:
基本上 , 当您定义和求解模型时,您使用 Python 函数或方法调用低级库,该库执行实际优化工作并将解决方案返回给您的 Python 对象 。
几个免费的 Python 库专门用于与线性或混合整数线性规划求解器交互:
在本教程中,您将使用SciPy和PuLP来定义和解决线性规划问题 。
在本节中,您将看到线性规划问题的两个示例:
您将在下一节中使用 Python 来解决这两个问题 。
考虑以下线性规划问题:
用python画线性函数你需要找到X和?使得红色,蓝色和黄色的不平等,以及不平等X0和?0,是满意的 。同时,您的解决方案必须对应于z的最大可能值 。
您需要找到的自变量(在本例中为x和y)称为决策变量。要最大化或最小化的决策变量的函数(在本例中为z)称为目标函数、成本函数或仅称为目标。您需要满足的不等式称为不等式约束。您还可以在称为等式约束的约束中使用方程 。
这是您如何可视化问题的方法:
红线代表的功能2 XY = 20,和它上面的红色区域示出了红色不等式不满足 。同样,蓝线是函数 4 x5 y = 10,蓝色区域被禁止,因为它违反了蓝色不等式 。黄线是x2 y =2,其下方的黄色区域是黄色不等式无效的地方 。
如果您忽略红色、蓝色和黄色区域,则仅保留灰色区域 。灰色区域的每个点都满足所有约束,是问题的潜在解决方案 。该区域称为可行域 , 其点为可行解。在这种情况下,有无数可行的解决方案 。
您想最大化z 。对应于最大z的可行解是最优解。如果您尝试最小化目标函数 , 那么最佳解决方案将对应于其可行的最小值 。
请注意,z是线性的 。你可以把它想象成一个三维空间中的平面 。这就是为什么最优解必须在可行区域的顶点或角上的原因 。在这种情况下,最佳解决方案是红线和蓝线相交的点,稍后您将看到 。
有时,可行区域的整个边缘,甚至整个区域 , 都可以对应相同的z值 。在这种情况下,您有许多最佳解决方案 。
您现在已准备好使用绿色显示的附加等式约束来扩展问题:
方程式x5 y = 15 , 以绿色书写,是新的 。这是一个等式约束 。您可以通过向上一张图像添加相应的绿线来将其可视化:
现在的解决方案必须满足绿色等式,因此可行区域不再是整个灰色区域 。它是绿线从与蓝线的交点到与红线的交点穿过灰色区域的部分 。后一点是解决方案 。
如果插入x的所有值都必须是整数的要求,那么就会得到一个混合整数线性规划问题,可行解的集合又会发生变化:
您不再有绿线,只有沿线的x值为整数的点 。可行解是灰色背景上的绿点,此时最优解离红线最近 。
这三个例子说明了可行的线性规划问题,因为它们具有有界可行区域和有限解 。
如果没有解 , 线性规划问题是不可行的。当没有解决方案可以同时满足所有约束时,通常会发生这种情况 。
例如,考虑如果添加约束xy1会发生什么 。那么至少有一个决策变量(x或y)必须是负数 。这与给定的约束x0 和y0相冲突 。这样的系统没有可行的解决方案 , 因此称为不可行的 。
另一个示例是添加与绿线平行的第二个等式约束 。这两行没有共同点,因此不会有满足这两个约束的解决方案 。
一个线性规划问题是无界的,如果它的可行区域是无界 , 将溶液不是有限 。这意味着您的变量中至少有一个不受约束,可以达到正无穷大或负无穷大,从而使目标也无限大 。
例如 , 假设您采用上面的初始问题并删除红色和黄色约束 。从问题中删除约束称为放松问题 。在这种情况下,x和y不会在正侧有界 。您可以将它们增加到正无穷大,从而产生无限大的z值 。
在前面的部分中,您研究了一个与任何实际应用程序无关的抽象线性规划问题 。在本小节中,您将找到与制造业资源分配相关的更具体和实用的优化问题 。
假设一家工厂生产四种不同的产品 , 第一种产品的日产量为x ?,第二种产品的产量为x 2,依此类推 。目标是确定每种产品的利润最大化日产量 , 同时牢记以下条件:
数学模型可以这样定义:
目标函数(利润)在条件 1 中定义 。人力约束遵循条件 2 。对原材料 A 和 B 的约束可以从条件 3 和条件 4 中通过对每种产品的原材料需求求和得出 。
最后,产品数量不能为负,因此所有决策变量必须大于或等于零 。
与前面的示例不同,您无法方便地将其可视化,因为它有四个决策变量 。但是,无论问题的维度如何,原理都是相同的 。
在本教程中,您将使用两个Python 包来解决上述线性规划问题:
SciPy 设置起来很简单 。安装后,您将拥有开始所需的一切 。它的子包scipy.optimize可用于线性和非线性优化 。
PuLP 允许您选择求解器并以更自然的方式表述问题 。PuLP 使用的默认求解器是COIN-OR Branch and Cut Solver (CBC) 。它连接到用于线性松弛的COIN-OR 线性规划求解器 (CLP)和用于切割生成的COIN-OR 切割生成器库 (CGL) 。
另一个伟大的开源求解器是GNU 线性规划工具包 (GLPK) 。一些著名且非常强大的商业和专有解决方案是Gurobi、CPLEX和XPRESS 。
除了在定义问题时提供灵活性和运行各种求解器的能力外,PuLP 使用起来不如 Pyomo 或 CVXOPT 等替代方案复杂 , 后者需要更多的时间和精力来掌握 。
要学习本教程,您需要安装 SciPy 和 PuLP 。下面的示例使用 SciPy 1.4.1 版和 PuLP 2.1 版 。
您可以使用pip以下方法安装两者:
您可能需要运行pulptest或sudo pulptest启用 PuLP 的默认求解器 , 尤其是在您使用 Linux 或 Mac 时:
或者,您可以下载、安装和使用 GLPK 。它是免费和开源的,适用于 Windows、MacOS 和 Linux 。在本教程的后面部分,您将看到如何将 GLPK(除了 CBC)与 PuLP 一起使用 。
在 Windows 上,您可以下载档案并运行安装文件 。
在 MacOS 上,您可以使用 Homebrew:
在 Debian 和 Ubuntu 上,使用apt来安装glpk和glpk-utils:
在Fedora,使用dnf具有glpk-utils:
您可能还会发现conda对安装 GLPK 很有用:
安装完成后,可以查看GLPK的版本:
有关详细信息,请参阅 GLPK 关于使用Windows 可执行文件和Linux 软件包进行安装的教程 。
在本节中,您将学习如何使用 SciPy优化和求根库进行线性规划 。
要使用 SciPy 定义和解决优化问题,您需要导入scipy.optimize.linprog():
现在您已经linprog()导入,您可以开始优化 。
让我们首先解决上面的线性规划问题:
linprog()仅解决最小化(而非最大化)问题 , 并且不允许具有大于或等于符号 ( ) 的不等式约束 。要解决这些问题,您需要在开始优化之前修改您的问题:
引入这些更改后 , 您将获得一个新系统:
该系统与原始系统等效,并且将具有相同的解决方案 。应用这些更改的唯一原因是克服 SciPy 与问题表述相关的局限性 。
下一步是定义输入值:
您将上述系统中的值放入适当的列表、元组或NumPy 数组中:
注意:请注意行和列的顺序!
约束左侧和右侧的行顺序必须相同 。每一行代表一个约束 。
来自目标函数和约束左侧的系数的顺序必须匹配 。每列对应一个决策变量 。
【用python画线性函数 python线形】下一步是以与系数相同的顺序定义每个变量的界限 。在这种情况下,它们都在零和正无穷大之间:
此语句是多余的,因为linprog()默认情况下采用这些边界(零到正无穷大) 。
注:相反的float("inf"),你可以使用math.inf,numpy.inf或scipy.inf 。
最后,是时候优化和解决您感兴趣的问题了 。你可以这样做linprog():
参数c是指来自目标函数的系数 。A_ub和b_ub分别与不等式约束左边和右边的系数有关 。同样,A_eq并b_eq参考等式约束 。您可以使用bounds提供决策变量的下限和上限 。
您可以使用该参数method来定义要使用的线性规划方法 。有以下三种选择:
linprog() 返回具有以下属性的数据结构:
您可以分别访问这些值:
这就是您获得优化结果的方式 。您还可以以图形方式显示它们:
如前所述,线性规划问题的最优解位于可行区域的顶点 。在这种情况下,可行区域只是蓝线和红线之间的绿线部分 。最优解是代表绿线和红线交点的绿色方块 。
如果要排除相等(绿色)约束,只需删除参数A_eq并b_eq从linprog()调用中删除:
解决方案与前一种情况不同 。你可以在图表上看到:
在这个例子中,最优解是红色和蓝色约束相交的可行(灰色)区域的紫色顶点 。其他顶点,如黄色顶点,具有更高的目标函数值 。
您可以使用 SciPy 来解决前面部分所述的资源分配问题:
和前面的例子一样,你需要从上面的问题中提取必要的向量和矩阵,将它们作为参数传递给.linprog(),然后得到结果:
结果告诉您最大利润是1900并且对应于x ? = 5 和x ? = 45 。在给定条件下生产第二和第四个产品是没有利润的 。您可以在这里得出几个有趣的结论:
opt.statusis0和opt.successis True,说明优化问题成功求解,最优可行解 。
SciPy 的线性规划功能主要用于较小的问题 。对于更大和更复杂的问题,您可能会发现其他库更适合,原因如下:
幸运的是,Python 生态系统为线性编程提供了几种替代解决方案,这些解决方案对于更大的问题非常有用 。其中之一是 PuLP , 您将在下一节中看到它的实际应用 。
PuLP 具有比 SciPy 更方便的线性编程 API 。您不必在数学上修改您的问题或使用向量和矩阵 。一切都更干净,更不容易出错 。
像往常一样 , 您首先导入您需要的内容:
现在您已经导入了 PuLP,您可以解决您的问题 。
您现在将使用 PuLP 解决此系统:
第一步是初始化一个实例LpProblem来表示你的模型:
您可以使用该sense参数来选择是执行最小化(LpMinimize或1,这是默认值)还是最大化(LpMaximize或-1) 。这个选择会影响你的问题的结果 。
一旦有了模型,就可以将决策变量定义为LpVariable类的实例:
您需要提供下限,lowBound=0因为默认值为负无穷大 。该参数upBound定义了上限 , 但您可以在此处省略它,因为它默认为正无穷大 。
可选参数cat定义决策变量的类别 。如果您使用的是连续变量 , 则可以使用默认值"Continuous" 。
您可以使用变量x和y创建表示线性表达式和约束的其他 PuLP 对象:
当您将决策变量与标量相乘或构建多个决策变量的线性组合时,您会得到一个pulp.LpAffineExpression代表线性表达式的实例 。
注意:您可以增加或减少变量或表达式 , 你可以乘他们常数,因为纸浆类实现一些Python的特殊方法,即模拟数字类型一样__add__(),__sub__()和__mul__() 。这些方法用于像定制运营商的行为,-和* 。
类似地,您可以将线性表达式、变量和标量与运算符 ==、=以获取表示模型线性约束的纸浆.LpConstraint实例 。
注:也有可能与丰富的比较方法来构建的约束.__eq__(),.__le__()以及.__ge__()定义了运营商的行为==,= 。
考虑到这一点,下一步是创建约束和目标函数并将它们分配给您的模型 。您不需要创建列表或矩阵 。只需编写 Python 表达式并使用 =运算符将它们附加到模型中:
在上面的代码中 , 您定义了包含约束及其名称的元组 。LpProblem允许您通过将约束指定为元组来向模型添加约束 。第一个元素是一个LpConstraint实例 。第二个元素是该约束的可读名称 。
设置目标函数非常相似:
或者,您可以使用更短的符号:
现在您已经添加了目标函数并定义了模型 。
注意:您可以使用运算符将 约束或目标附加到模型中,=因为它的类LpProblem实现了特殊方法.__iadd__(),该方法用于指定 的行为 = 。
对于较大的问题 , lpSum()与列表或其他序列一起使用通常比重复 运算符更方便 。例如,您可以使用以下语句将目标函数添加到模型中:
它产生与前一条语句相同的结果 。
您现在可以看到此模型的完整定义:
模型的字符串表示包含所有相关数据:变量、约束、目标及其名称 。
注意:字符串表示是通过定义特殊方法构建的.__repr__() 。有关 的更多详细信息.__repr__(),请查看Pythonic OOP 字符串转换:__repr__vs__str__ .
最后,您已准备好解决问题 。你可以通过调用.solve()你的模型对象来做到这一点 。如果要使用默认求解器 (CBC),则不需要传递任何参数:
.solve()调用底层求解器,修改model对象,并返回解决方案的整数状态 , 1如果找到了最优解 。有关其余状态代码,请参阅LpStatus[] 。
你可以得到优化结果作为 的属性model 。该函数value()和相应的方法.value()返回属性的实际值:
model.objective持有目标函数model.constraints的值 , 包含松弛变量的值,以及对象x和y具有决策变量的最优值 。model.variables()返回一个包含决策变量的列表:
如您所见,此列表包含使用 的构造函数创建的确切对象LpVariable 。
结果与您使用 SciPy 获得的结果大致相同 。
注意:注意这个方法.solve()——它会改变对象的状态,x并且y!
您可以通过调用查看使用了哪个求解器.solver:
输出通知您求解器是 CBC 。您没有指定求解器,因此 PuLP 调用了默认求解器 。
如果要运行不同的求解器,则可以将其指定为 的参数.solve() 。例如 , 如果您想使用 GLPK 并且已经安装了它,那么您可以solver=GLPK(msg=False)在最后一行使用 。请记住 , 您还需要导入它:
现在你已经导入了 GLPK,你可以在里面使用它.solve():
该msg参数用于显示来自求解器的信息 。msg=False禁用显示此信息 。如果要包含信息,则只需省略msg或设置msg=True 。
您的模型已定义并求解,因此您可以按照与前一种情况相同的方式检查结果:
使用 GLPK 得到的结果与使用 SciPy 和 CBC 得到的结果几乎相同 。
一起来看看这次用的是哪个求解器:
正如您在上面用突出显示的语句定义的那样model.solve(solver=GLPK(msg=False)),求解器是 GLPK 。
您还可以使用 PuLP 来解决混合整数线性规划问题 。要定义整数或二进制变量,只需传递cat="Integer"或cat="Binary"到LpVariable 。其他一切都保持不变:
在本例中,您有一个整数变量并获得与之前不同的结果:
Nowx是一个整数,如模型中所指定 。(从技术上讲 , 它保存一个小数点后为零的浮点值 。)这一事实改变了整个解决方案 。让我们在图表上展示这一点:
如您所见,最佳解决方案是灰色背景上最右边的绿点 。这是两者的最大价值的可行的解决方案x和y , 给它的最大目标函数值 。
GLPK 也能够解决此类问题 。
现在你可以使用 PuLP 来解决上面的资源分配问题:
定义和解决问题的方法与前面的示例相同:
在这种情况下,您使用字典 x来存储所有决策变量 。这种方法很方便 , 因为字典可以将决策变量的名称或索引存储为键 , 将相应的LpVariable对象存储为值 。列表或元组的LpVariable实例可以是有用的 。
上面的代码产生以下结果:
如您所见,该解决方案与使用 SciPy 获得的解决方案一致 。最有利可图的解决方案是每天生产5.0第一件产品和45.0第三件产品 。
让我们把这个问题变得更复杂和有趣 。假设由于机器问题,工厂无法同时生产第一种和第三种产品 。在这种情况下,最有利可图的解决方案是什么?
现在您有另一个逻辑约束:如果x ? 为正数,则x ? 必须为零,反之亦然 。这是二元决策变量非常有用的地方 。您将使用两个二元决策变量y ? 和y ?,它们将表示是否生成了第一个或第三个产品:
除了突出显示的行之外,代码与前面的示例非常相似 。以下是差异:
这是解决方案:
事实证明,最佳方法是排除第一种产品而只生产第三种产品 。
就像有许多资源可以帮助您学习线性规划和混合整数线性规划一样,还有许多具有 Python 包装器的求解器可用 。这是部分列表:
其中一些库 , 如 Gurobi , 包括他们自己的 Python 包装器 。其他人使用外部包装器 。例如,您看到可以使用 PuLP 访问 CBC 和 GLPK 。
您现在知道什么是线性规划以及如何使用 Python 解决线性规划问题 。您还了解到 Python 线性编程库只是本机求解器的包装器 。当求解器完成其工作时,包装器返回解决方案状态、决策变量值、松弛变量、目标函数等 。
用python画线性函数的介绍就聊到这里吧 , 感谢你花时间阅读本站内容 , 更多关于python线形、用python画线性函数的信息别忘了在本站进行查找喔 。

    推荐阅读