Python数据分析NumPy和pandas(二十七、数据可视化 matplotlib API 入门)
数据可视化或者数据绘图是数据分析中最重要的任务之一,是数据探索过程的一部分,数据可视化可以帮助我们识别异常值、识别出需要的数据转换以及为模型生成提供思考依据。对于Web开发人员,构建基于Web的数据可视化显示也是一种重要的方式。Python 有许多用于制作静态或动态可视化的附加库,我主要学习的是 matplotlib库 以及基于它构建的库。
matplotlib 是一个桌面绘图包,旨在创建适合发布的绘图和图形。该项目由 John Hunter 于 2002 年启动,目的是在 Python 中启用类似 MATLAB 的绘图界面。matplotlib 和 IPython 社区合作简化了 IPython shell(现在是 Jupyter notebook)的交互式绘图。matplotlib 支持所有操作系统上的各种 GUI 后端,并且可以将可视化导出为所有常见的矢量和光栅图形格式(PDF、SVG、JPG、PNG、BMP、GIF 等)。
随着时间的推移,matplotlib 催生了许多用于数据可视化的附加工具包,这些工具包使用 matplotlib 进行底层绘图。其中之一是 seaborn,seaborn库也经常用。可以通过Jupyter notebook来演示示例代码和输出绘图。要使用Jupyter notebook我们可以通过vs code的扩展商店安装它,如下图所示:
安装之后就可以直接使用了,编码方式和输出方式相比于用编辑器要简单些,可以动手试试。我还是沿用编辑器来做代码示例。
对于 matplotlib 库,我们使用以下导入约定:import matplotlib.pyplot as plt
下面我们先创建一个简单的绘图看看:
import numpy as np
import pandas as pd
import matplotlib.pyplot as pltdata = np.arange(10)
plt.plot(data)
plt.show()
生成如下图形:
如果想要自定义图形展示的外观等细节,我们需要学习一些matplotlib API的知识。当然要学习matplotlib的高级功能,可以查阅它的官方文档。
一、Figures 和 Subplots
用 matplotlib 绘制图形,实在 Figure 对象的图窗中进行的。我们可以使用 plt.figure 创建一个新图窗:
import matplotlib.pyplot as pltfig = plt.figure()
plt.figure 有很多参数选项,如果要把图形保存到磁盘,可以用 figsize 参数设置图形的大小和纵横比。不能使用空白数字制作绘图,必须使用 add_subplot 创建一个或多个子图:
import matplotlib.pyplot as pltfig = plt.figure()
ax1 = fig.add_subplot(2, 2, 1)
fig.add_subplot(2, 2, 1)这行代码表示该图有 2 × 2(总共最多四个)子图,并且我们选择四个子图中的第一个(从 1 开始编号)。如果我们创建接下来的两个子图,则最终会得到一个如下所示的可视化效果:
import matplotlib.pyplot as pltfig = plt.figure()
ax1 = fig.add_subplot(2, 2, 1)
ax2 = fig.add_subplot(2, 2, 2)
ax3 = fig.add_subplot(2, 2, 3)plt.show()
这些绘图轴对象(如上面的ax1、ax2、ax3)具有创建不同类型绘图的各种方法,最好使用他们的方法来绘制图像而不是使用 plt.plot 等最顶级的绘图函数。例如,我们可以使用轴对象的 plot 方法制作线图如下:
import numpy as np
import matplotlib.pyplot as pltfig = plt.figure()
ax1 = fig.add_subplot(2, 2, 1)
ax2 = fig.add_subplot(2, 2, 2)
ax3 = fig.add_subplot(2, 2, 3)
ax3.plot(np.random.standard_normal(50).cumsum(), color="black", linestyle="dashed")plt.show()
color="black", linestyle="dashed"参数选项指示 matplotlib 绘制一条黑色虚线。fig.add_subplot 返回的对象是 AxesSubplot 对象。您可以通过调用每个 AxesSubplot 对象的实例方法在其他空子图上绘制图形:
import numpy as np
import pandas as pd
import matplotlib.pyplot as pltfig = plt.figure()
ax1 = fig.add_subplot(2, 2, 1)
ax2 = fig.add_subplot(2, 2, 2)
ax3 = fig.add_subplot(2, 2, 3)# plot绘制曲线图
ax3.plot(np.random.standard_normal(50).cumsum(), color="black", linestyle="dashed")
# hist绘制直方图
ax1.hist(np.random.standard_normal(100), bins=20, color="black", alpha=0.3)
# scatter绘制散点图
ax2.scatter(np.arange(30), np.arange(30) + 3 * np.random.standard_normal(30))plt.show()
参数选项 alpha=0.3 设置图形的透明度。我们可以查看 matplotlib 文档,了解所有的绘图类型。
为了更方便地创建子图网格,matplotlib 有一个 plt.subplots 方法,该方法创建一个新图形并返回一个包含创建的子图对象的 NumPy 数组:
import numpy as np
import pandas as pd
import matplotlib.pyplot as pltfig, axes = plt.subplots(2, 3)
print(axes)plt.show()
print(axes)输出:
[[<Axes: > <Axes: > <Axes: >]
[<Axes: > <Axes: > <Axes: >]]
表示生成了6个子图对象,这6个子图对象2行3列排列。输出如下图:
然后,可以像二维数组一样对 axes 数组进行索引,例如:例如,axes[0, 1] 引用第一行中间的子图。还可以分别使用 sharex 和 sharey 指示子图应具有相同的 x 轴或 y 轴。当我们比较相同尺度的数据时,这可能很有用;否则,matplotlib 会独立自动缩放绘图限制。matplotlib.pyplot.subplots 方法的参数选项见下图列表:
二、调整子图周围的间距
默认情况下,matplotlib 在子图的外部和子图之间的间距中保留一定量的填充。此间距都是相对于绘图的高度和宽度指定的,因此,如果您以编程方式或使用 GUI 窗口手动调整绘图大小,绘图将动态调整自身。您可以使用 subplots_adjust 方法对 Figure 对象更改间距:
subplots_adjust(left=None, bottom=None, right=None, top=None, wspace=None, hspace=None)
wspace 和 hspace 分别控制图形宽度和图形高度的百分比,以用作子图之间的间距。下面是一个代码小示例,将间距一直缩小到零:
import numpy as np
import pandas as pd
import matplotlib.pyplot as pltfig, axes = plt.subplots(2, 2, sharex=True, sharey=True)
for i in range(2):for j in range(2):axes[i, j].hist(np.random.standard_normal(500), bins=50, color="black", alpha=0.5)
fig.subplots_adjust(wspace=0, hspace=0)plt.show()
上面图形中轴标签重叠了。matplotlib 不会检查标签是否重叠,因此在这种情况下,需要通过指定显式刻度位置和刻度标签来修复标签(在后面的“刻度、标签和图例”部分中学习如何执行此操作)。
三、颜色、标记和线条样式
matplotlib 的绘制线图函数 plot() 接受 x 和 y 坐标数组以及可选的颜色样式。例如,要用绿色破折号绘制 x 与 y 的关系,可以执行:ax.plot(x, y, linestyle="--", color="green")
matplotlib 提供了许多颜色名称,但是我们也可以通过指定颜色的十六进制代码(例如,“#CECECE”)来使用光谱上的任何颜色。我们可以通过查看官方文档来查询 plt.plot 支持的线条样式。
由于 matplotlib 的 plot 函数创建一个连续的线图,因此有时不清楚点的位置,我们可以用标记突出显示某些数据点:
import numpy as np
import matplotlib.pyplot as pltfig = plt.figure()
ax = fig.add_subplot()
ax.plot(np.random.standard_normal(30).cumsum(), color="black", linestyle="dashed", marker="o")plt.show()
对于线图,我们注意到默认情况下,后续点是线性插值的。这可以通过 drawstyle 参数选项进行更改:
import numpy as np
import pandas as pd
import matplotlib.pyplot as pltfig = plt.figure()
ax = fig.add_subplot()
data = np.random.standard_normal(30).cumsum()
ax.plot(data, color="black", linestyle="dashed", label="Default")
ax.plot(data, color="black", linestyle="dashed", drawstyle="steps-post", label="steps-post")
ax.legend()plt.show()
在这里,由于我们将标签参数传递给了 plot,因此我们能够创建一个 plot legend 来使用 ax.legend 标识每一行。我在 “Ticks, Labels, and Legends” 中详细讨论了图例。
在这里,我们将标签参数传递给了 plot,因此我们能够创建一个 plot.legend 来使用 ax.legend 标识每一行。注意,无论在绘制数据时是否传递了标签选项,必须调用 ax.legend 来创建图例。
四、刻度、标签和图例
大多数类型的绘图装饰都可以通过 matplotlib axes 对象上的方法访问。这包括 xlim、xticks 和 xticklabels 等方法。它们分别控制绘图范围、刻度位置和刻度标签。它们可以通过两种方式使用:
不带参数的调用返回当前参数值(例如,ax.xlim() 返回当前 x 轴绘图范围)
带参数调用 设置参数值(例如,ax.xlim([0, 10])将 x 轴范围设置为 0 到 10)
所有这些方法都作用于活动或最近创建的 AxesSubplot。subplot 对象本身都有这几个方法的get和set方法,例如:对于 xlim,是 ax.get_xlim 和 ax.set_xlim。
设置标题、轴标签、刻度和刻度标签。我们用代码示例来学习,创建一个随机游走绘图。
import numpy as np
import pandas as pd
import matplotlib.pyplot as pltfig, ax = plt.subplots()
ax.plot(np.random.standard_normal(1000).cumsum());
plt.show()
以上代码随机生成1000个随机数的累积和,来表示随机游走的每一步。输出绘图如下:
要更改 x 轴刻度,最简单的方法是使用 set_xticks 和 set_xticklabels。前者指示 matplotlib 沿数据范围将刻度线放置在何处;默认情况下,这些位置也将成为标签。但是我们可以使用 set_xticklabels 将任何其他值设置为标签。如下代码示例:
import numpy as np
import matplotlib.pyplot as pltfig, ax = plt.subplots()
ax.plot(np.random.standard_normal(1000).cumsum());# 设置刻度
ticks = ax.set_xticks([0, 250, 500, 750, 1000])
# rotation 参数将 x 刻度标签设置为旋转 30 度
labels = ax.set_xticklabels(["one", "two", "three", "four", "five"], rotation=30, fontsize=8)
# set_xlabel 为 x 轴命名
ax.set_xlabel("Stages")
# set_title 为子图命名
ax.set_title("我的第一个 matplotlib plot")plt.show()
修改 y 轴由相同的过程组成,在此示例中,用 y 代替 x。axes 类有一个 set 方法,允许批量设置绘图属性。前面的例子中,我们也可以这样写:
ax.set(title="我的第一个 matplotlib plot", xlabel="Stages")
添加图例
图例是识别绘制的图形中情节元素的另一个关键元素。有几种方法可以添加,最简单的是在添加每个 plot 时传递 label 参数:
import numpy as np
import matplotlib.pyplot as pltfig, ax = plt.subplots()ax.plot(np.random.randn(1000).cumsum(), color="black", label="one")
ax.plot(np.random.randn(1000).cumsum(), color="black", linestyle="dashed", label="two")
ax.plot(np.random.randn(1000).cumsum(), color="black", linestyle="dotted", label="three")# 完成label设置,调用 ax.legend() 来自动创建图例。
ax.legend()plt.show()
输出:
legend() 方法还有几个其他的 location loc 参数选项。有关更多信息,请参阅官方文档。loc legend 选项告诉 matplotlib 将绘图放置在何处。默认值为 “best”,它尝试选择一个最不碍事的位置。要从图例中排除一个或多个元素,传递 no label 或 label=“_nolegend_”。
五、子图上的注释和绘图
除了标准绘图类型之外,有时候我们希望绘制自己的绘图注释,我们的注释可以由文本、箭头或其他形状组成。那我们可以使用 text、arrow 和 annotate 函数添加注释和文本。text() 在给定坐标 (x, y) 处绘制文本,具有可选的自定义样式,例如:
ax.text(x, y, "Hello world!", family="monospace", fontsize=10)
annotate 函数可以绘制适当排列的文本和箭头。我们用代码示例来学习,让我们绘制自 2007 年以来标准普尔 500 指数的收盘价(从雅虎财经获得),并用 2008-2009 年金融危机的一些重要日期对其进行注释。用到数据文件csv内容如下图所示。
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from datetime import datetimefig, ax = plt.subplots()data = pd.read_csv("examples/spx.csv", index_col=0, parse_dates=True)
spx = data["SPX"]spx.plot(ax=ax, color="black")crisis_data = [(datetime(2007, 10, 11), "Peak of bull market"),(datetime(2008, 3, 12), "Bear Stearns Fails"),(datetime(2008, 9, 15), "Lehman Bankruptcy")
]for date, label in crisis_data:ax.annotate(label, xy=(date, spx.asof(date) + 75),xytext=(date, spx.asof(date) + 225),arrowprops=dict(facecolor="black", headwidth=4, width=2,headlength=4),horizontalalignment="left", verticalalignment="top")# Zoom in on 2007-2010
ax.set_xlim(["1/1/2007", "1/1/2011"])
ax.set_ylim([600, 1800])ax.set_title("Important dates in the 2008–2009 financial crisis")plt.show()
输出图形如下:
此图中有几个要点需要强调。ax.annotate 方法可以在指示的 x 和 y 坐标处绘制标签。我们使用 set_xlim 和 set_ylim 方法来手动设置绘图的开始和结束边界,而不是使用 matplotlib 的默认值。最后,ax.set_title 添加了一个主要标题。(请参阅在线 matplotlib 库,了解更多可供学习的注释示例)。
matplotlib 具有表示许多常见形状(称为面片)的对象。其中一些,如 Rectangle 和 Circle,可以在 matplotlib.pyplot 中找到,但完整的集合位于 matplotlib.patches 中。要向绘图添加形状,需创建 patch 对象,并将 patch 传递给 ax.add_patch 将其添加到子图轴中:
import matplotlib.pyplot as pltfig, ax = plt.subplots()rect = plt.Rectangle((0.2, 0.75), 0.4, 0.15, color="black", alpha=0.3)
circ = plt.Circle((0.7, 0.2), 0.15, color="blue", alpha=0.3)
pgon = plt.Polygon([[0.15, 0.15], [0.35, 0.4], [0.2, 0.6]], color="green", alpha=0.5)ax.add_patch(rect)
ax.add_patch(circ)
ax.add_patch(pgon)plt.show()
输出:
如果我们仔细看一下许多熟悉的 plot 类型的实现,会发现它们是由 patchs 组装而成的。
六、将绘图保存到文件
可以使用 figure 对象的 savefig 实例方法将活动图窗保存到文件中。例如,要保存图形的 SVG 版本,只需键入这行代码:fig.savefig("figpath.svg")
文件类型是从文件扩展名推断出来的。因此,如果您使用 .pdf 代替,您将获得 PDF。我们经常用于发布图形的一个重要选项是 dpi,它控制每英寸点数的分辨率。要在 400 DPI 下获得与 PNG 相同的绘图,您可以执行以下操作:fig.savefig("figpath.png", dpi=400)
有关 savefig 的一些其他参数选项的见如下列表:
七、matplotlib 配置
matplotlib 一般情况下设置好了要绘制发布图表的配色方案的默认值以及其他选项的默认值。但我们也可以使用它的全局参数自定义控制图形大小、子图间距、颜色、字体大小、网格样式等。 以Python编程方式修改配置的一种方法是使用 rc() 方法。例如,要将全局默认窗口大小设置为 10 × 10,可以输入:plt.rc("figure", figsize=(10, 10))
所有当前配置设置都可以在 plt.rcParams 字典中找到,并且可以通过调用 plt.rcdefaults() 函数将它们恢复为默认值。rc 的第一个参数是你想要自定义的组件,比如 “figure”, “axes”, “xtick”, “ytick”, “grid”, “legend” 等等。
要进行更广泛的自定义并查看所有选项的列表,matplotlib 在 matplotlib/mpl-data 目录中提供了一个配置文件 matplotlibrc。如果您自定义此文件并将其放在名为 .matplotlibrc 的主目录中,则每次使用 matplotlib 时都会加载该文件。
相关文章:
Python数据分析NumPy和pandas(二十七、数据可视化 matplotlib API 入门)
数据可视化或者数据绘图是数据分析中最重要的任务之一,是数据探索过程的一部分,数据可视化可以帮助我们识别异常值、识别出需要的数据转换以及为模型生成提供思考依据。对于Web开发人员,构建基于Web的数据可视化显示也是一种重要的方式。Pyth…...
数组指针和指针的区别
区分数组指针和指针数组 int *p[3]和 int (*p)[3] 根据运算符的优先级,"[]"的优先级是高于“*”的,p就会先与[]结合,那么它本质就是数组,数组内存放的是指针,它叫指针数组。(int*p[3]ÿ…...
Linux git-bash配置
参考资料 命令提示符Windows下的Git Bash配置,提升你的终端操作体验WindowsTerminal添加git-bash 目录 一. git-bash配置1.1 解决中文乱码1.2 修改命令提示符 二. WindowsTerminal配置git-bash2.1 添加git-bash到WindowsTerminal2.2 解决删除时窗口闪烁问题 三. VS…...
【后端速成Vue】computed计算属性
前言: 本期将会介绍 Vue 中的计算属性,他和 methods 方法又会有什么区别呢?在这里都会给你一一讲解。 篮球哥找工作专属IT岗位内部推荐: 专属内推链接:内推通道 1、computed计算属性 概念: 基于现有的数据…...
力扣-每日温度
. - 力扣(LeetCode) 这是我的第一个思路 虽然可以得到正确答案 但是过于暴力 已经超出了时间限制 class Solution { public:vector<int> dailyTemperatures(vector<int>& temperatures) {vector<int>ans;for (int i 0; i <…...
(Go语言)初上手Go?本篇文章帮拿捏Go的数据类型!
1. bool 类型 布尔类型:只有 true 和 false 两种值 在Go中,整数 0 不代表 false 值,1也不代表 true 值 即数字无法代替布尔值进行逻辑判断,两者是完全不同的类型 布尔类型占用 1 字节 2. int 整型 Go中为不同位数的整数分配…...
支付宝域名如何加入白名单(扫码老是弹窗)
支付宝扫码之后,遇到非支付宝官方网页,请确认是否继续访问弹窗,问题解决办法。 本章教程提供解决办法,亲测有效。 一、打开支付宝开放平台 登录地址:https://open.alipay.com/ 然后进行扫码登录。 1、打开网页/移动应用开发 2、前往创建 3、创建应用...
嵌入式学习第21天Linux基础
目录 第1章 Linux 系统介绍 1.1 Unix 操作系统(了解) 1.2 Linux 操作系统(了解) 1.3 Linux 操作系统的主要特性(重点) 1.4 Linux 与 Unix 的区别与联系 1.5 GUN 与 GPL(了解) …...
【activiti工作流源码集成】springboot+activiti+mysql+vue+redis工作流审批流集成整合业务绑定表单流程图会签驳回
工作流集成实际项目案例,demo提供 源码获取方式:本文末个人名片直接获取。 前言 activiti工作流引擎项目,企业erp、oa、hr、crm等企事业办公系统轻松落地,请假审批demo从流程绘制到审批结束实例。 一、项目形式 springbootvue…...
华为私有接口类型hybrid
华为私有接口类型hybrid Tip:hybrid类型,简称混合型接口。 本次实验模拟2层网络下 vlan10 vlan20 不能互访,vlan10 vlan20 同时可以访问vlan100 sw1配置如下: <Huawei>sy [Huawei]sys sw1 [sw1]vl ba 10 20 100 [sw1]int…...
计算机的错误计算(一百五十)
摘要 探讨 MATLAB 中 的计算精度问题。当 为含有小数的大数或 ()附近数时,输出会有错误数字。 例1. 已知 计算 直接贴图吧: 另外,16位的正确值分别为 -0.7882256119904400e0、0.1702266977524110e0、-0.…...
【模块化大作战】Webpack如何搞定CommonJS与ES6混战(3)
在前端开发中,模块化是一个重要的概念,不同的模块化标准有不同的特点和适用场景。webpack 同时支持 CommonJS 和 ES6 Module,因此需要理解它们在互操作时 webpack 是如何处理的。 同模块化标准 如果导出和导入使用的是同一种模块化标准&…...
工程认证与Spring Boot:计算机课程管理的新探索
摘要 随着信息技术在管理上越来越深入而广泛的应用,管理信息系统的实施在技术上已逐步成熟。本文介绍了基于工程教育认证的计算机课程管理平台的开发全过程。通过分析基于工程教育认证的计算机课程管理平台管理的不足,创建了一个计算机管理基于工程教育认…...
vue3的自定义hooks怎么写?
写个hook函数去追踪鼠标位置: 没用hook前: <script setup> import { ref, onMounted, onUnmounted } from vueconst x ref(0) const y ref(0)function update(event) {x.value event.pageXy.value event.pageY }onMounted(() > window.ad…...
SpringBoot项目编译报错 类文件具有错误的版本 61.0, 应为 52.0
springboot项目在编译时报错: /Users/Apple/Developer/art/caicai/cai-api/dubbo-samples/1-basic/dubbo-samples-spring-boot/dubbo-samples-spring-boot-provider/src/main/java/org/apache/dubbo/springboot/demo/provider/ProviderApplication.java:22:32 java…...
【网络】应用层——HTTP协议
> 作者:დ旧言~ > 座右铭:松树千年终是朽,槿花一日自为荣。 > 目标:了解什么是HTTP协议。 > 毒鸡汤:有些事情,总是不明白,所以我不会坚持。早安! > 专栏选自:网络 &g…...
ServletContext介绍
文章目录 1、ServletContext对象介绍1_方法介绍2_用例分析 2、ServletContainerInitializer1_整体结构2_工作原理3_使用案例 3、Spring案例源码分析1_注册DispatcherServlet2_注册配置类3_SpringServletContainerInitializer 4_总结 ServletContext 表示上下文对象,…...
让AI帮我用java实现EasyExel读取图片—支持WPS嵌入图片
🌈 场景概述 java 小伙伴相信都使用 EasyExcel 以及 POI 库实现过 Excel 批量导入、导出功能,但只有部分人实现过 excel 导入带图片数据的场景。这个技术实现手段网上也有很多案例和demo,最常见的就是通过 XSSFPictureData 来实现。但是在 W…...
C# 实现对指定句柄的窗口进行键盘输入的实现
在C#中实现对指定句柄的窗口进行键盘操作,可以通过多种方式来实现。以下是一篇详细的指南,介绍如何在C#中实现这一功能。 1. 使用Windows API函数 在C#中,我们可以通过P/Invoke调用Windows API来实现对指定窗口的键盘操作。以下是一些关键的…...
深度学习之卷积问题
1 卷积在图像中有什么直观作用 在卷积神经网络中,卷积常用来提取图像的特征,但不同层次的卷积操作提取到的特征类型是不相同的,特征类型粗分如表1所示。 表1 卷积提取的特征类型 卷积层次特征类型浅层卷积边缘特征中层卷积局部特征深…...
yum安装zabbix5.0升级php到74的办法
【背景】 公司时不时有扫描漏洞,之前发现了php漏洞,因开启防火墙,限定IP+端口,暂时躲过升级;现在,老话重提,开启了KPI考核,躲是躲不过去的了,升级吧 【难题】 服务器为centos7,因操作系统问题,只能安装zabbix5.0。当时图省力,官网的办法,都是yum安装,很是简便。…...
JavaWeb合集23-文件上传
二十三 、 文件上传 实现效果:用户点击上传按钮、选择上传的头像,确定自动上传,将上传的文件保存到指定的目录中,并重新命名,生成访问链接,返回给前端进行回显。 1、前端实现 vue3AntDesignVue实现 <tem…...
当AI遇上时尚:未来的衣橱会由机器人来打理吗?
内容概要 在当今这个快速发展的时代,人工智能与时尚的结合正在逐渐改写我们对衣橱管理的认知。传统的衣橱管理常常面临着空间不足、穿搭单调及库存过多等挑战,许多人在挑选服饰时难以做出决策。然而,随着技术的进步,智能推荐和自…...
【初阶数据结构篇】二叉树OJ题
文章目录 须知 💬 欢迎讨论:如果你在学习过程中有任何问题或想法,欢迎在评论区留言,我们一起交流学习。你的支持是我继续创作的动力! 👍 点赞、收藏与分享:觉得这篇文章对你有帮助吗࿱…...
Windows系统中Oracle VM VirtualBox的安装
一.背景 公司安排了师带徒,环境搭建问题一直是初级程序员头疼的事情,我记录一下这些基础的内容,方便初学者。大部分开发者的机器还是windows系统,所以写了怎么安装。 二.版本信息及 操作系统:windows11 家庭版…...
go语言使用总结(持续更新)
整理后的内容如下: 1. 先了解函数签名,再了解传入参数以及调用 函数签名是函数的声明部分,包括函数名、参数列表和返回值列表。理解函数签名是理解函数行为的第一步,尤其是在了解参数类型、参数数量和返回值类型等方面。通过了解…...
如何在Android中自定义property
在Android中创建自定义的属性(Android property)通常用于调试、性能调优或传递应用和系统之间的信息。 以下是如何在Android中创建和使用自定义属性的步骤: 1. 定义属性 在Android中,属性是以“属性名称属性值”形式定义的键值对…...
机器学习5_支持向量机_原问题和对偶问题——MOOC
目录 原问题与对偶问题的定义 定义该原问题的对偶问题如下 在定义了函数 的基础上,对偶问题如下: 综合原问题和对偶问题的定义得到: 定理一 对偶差距(Duality Gap) 强对偶定理(Strong Duality Theo…...
索引的细节
目录 什么是线性 搜索算法? 算法:二进制搜索算法 二进制搜索如何工作? 什么是二叉排序树? 构建二叉排序树 什么是AVL树? AVL树的性能分析 什么是线性 搜索算法? 线性搜索是一种非常简单的搜索算法。在…...
LeetCode 540.有序数组中的单一元素
思路一:hash,键存入元素,值存入次数,然后遍历,不是最优解 思路二:二分查找 假设数组为 [1, 1, 2, 2, 3, 4, 4],其中唯一出现一次的元素是 3。在一个有序数组中,如果没有唯一的元素&…...
福建富通建设有限公司网站/网站关键词优化排名技巧
在Linux下安装Oracle软件之前,有相当工作需要准备,包括建立用户、配置内核参数、配置资源限制参数、配置Oracle用户环境等,十分繁琐。即便十分熟悉,也需要花费一定的精力来准备。说白了,做这些事情有点类似于低水平重复…...
网站建设实训总结及体会/软文案例大全300字
目前基于nfc手机的开发主要集中于: 1.个体识别 终端标签 (NFC标签) 区分一个终端(设备、物体、网址、文字等) 例如:在nfc标签中写入网址,手机nfc刷该标签后,手机浏览器自动打开该…...
黄岛网站建设多少钱/网络推广外包搜索手机蛙软件
1、resize()函数最简单的图像变换就是调整图像大小。resize()函数用于调整图像的大小。 根据输入的图像和尺寸,生成所需尺寸的新图像。void cv::resize(cv::InputArray src,cv::OutputArray dst,cv::Size dsize,double fx 0, edouble fy 0,int interpolation CV:…...
腾讯有服务器如何做网站/江苏搜索引擎优化公司
2019独角兽企业重金招聘Python工程师标准>>> 1.用composer安装toplan/laravel-sms composer require toplan/laravel 2.在config/app.php文件中修改别名 3.生成两个文件或者从其他项目拿过来 拿过来也行: 4.控制器引入 use PHPMailer\PHPMailer\PHPMaile…...
新准则中公司网站建设费用计入什么科目/网站关键词优化
决定了以后有时间还是要多写文章,多积累、沉淀一些干货。人的进步总是不经意间的,希望通过自己的努力能够达到心里的一个高度,不要三年过后啥都没学到,还是和一年的经验一样那就太悲伤了。 既然决定了,就不顾风雨兼程&…...
章丘做网站哪家强/seo需要掌握什么技能
基于electron的音视频播放器前言选择做一个音视频播放器桌面应用程序原因技术的选型已经实现了的功能音视频播放实现右键菜单实现总结效果图安装包下载:最后如果大家觉得我这个音视频播放器还可以的话,欢迎去我的github:前言 我是一个前端工…...