Matplotlib入门

news2025/1/16 1:58:52

基本使用

基本用法

import matplotlib.pyplot as plt
import numpy as np

x=np.linspace(-1,1,50)
y=2*x+1

plt.figure()#定义一个图像窗口
plt.plot(x,y)#画(x,y)曲线
plt.show()#显示图像

在这里插入图片描述

figure图像

import matplotlib.pyplot as plt
import numpy as np

x=np.linspace(-3,3,50)
y1=2*x+1
y2=x**2
y3=x+1

plt.figure(num=3,figsize=(8,5))
plt.plot(x,y2)
plt.plot(x,y1,color="red",linewidth=1.0,linestyle="--")
plt.show()

在这里插入图片描述

设置坐标轴

设置坐标轴范围,标签,刻度

import matplotlib.pyplot as plt
import numpy as np

x=np.linspace(-3,3,50)
y1=2*x+1
y2=x**2

plt.figure()
plt.plot(x,y2)
plt.plot(x,y1,color="red",linewidth=1.0,linestyle="--")

plt.xlim((-1,2))#设置x轴范围
plt.ylim((-2,3))#设置y轴范围
plt.xlabel("x轴标签")#设置x轴标签
plt.ylabel("y轴标签")#设置y轴标签
# plt.show()

new_ticks=np.linspace(-1,2,5)
plt.xticks(new_ticks) #设置x轴刻度

#设置y轴的刻度和名称
plt.yticks([-2,-1.8,-1,1.22,3],['nice','bad','normal','good','best'])
plt.show()

在这里插入图片描述
你可能会发现我中间注释了一段plt.show(),我原本以为plt.show()可以随意使用,但是似乎并不是,如果将注释掉的plt.show()展示出来,结果如下图
在这里插入图片描述
在这里插入图片描述
输出了2个图像,但是第2个图像并没有数据,我目前的理解是plt.show()运行过后会把里面的数据拿走,所以第2个图像的x和y的数据就是空的,所以在页面上就无任何显示。

设置坐标轴边框和位置

import matplotlib.pyplot as plt
import numpy as np

x=np.linspace(-3,3,50)
y1=2*x+1
y2=x**2

plt.figure()
plt.plot(x,y2)
plt.plot(x,y1,color="red",linewidth=1.0,linestyle="--")

new_ticks=np.linspace(-1,2,5)
plt.xticks(new_ticks) #设置x轴刻度
#设置y轴的刻度和名称
plt.yticks([-2,-1.8,-1,1.22,3],['nice','bad','normal','good','best'])

ax=plt.gca()#获取当前坐标轴信息
ax.spines["right"].set_color("none")#spines设置边框,color为none默认为白色
ax.spines["top"].set_color("none")

plt.show()

在这里插入图片描述

# 设置x轴坐标位置(所有位置:top,bottom,both,default,none)
ax.xaxis.set_ticks_position("top")
# 这个方法用于设置底部(bottom)边界的位置,将它移动到y轴上的特定位置。
# 在这个方法中,(“data”, 0) 参数表示将底部边界移动到y轴上的值为0的位置。
# 这意味着底部边界将位于y轴的0值处,这通常用于创建包围坐标轴的边框效果,
# 使图形中的数据点与坐标轴之间有一定的距离。
ax.spines["bottom"].set_position(("data",0))
plt.show()

在这里插入图片描述
ax.spines["bottom"].set_position(("data", 0)) 中的 "data" 参数表示将底部边界的位置设置为数据坐标系中的特定位置。在Matplotlib中,有两种常用的坐标系,分别是数据坐标系(data coordinates)和图像坐标系(axes coordinates)。

  • 数据坐标系:数据坐标系是指图形中的实际数据点所在的坐标系。例如,在一个散点图中,数据点的位置是根据横轴和纵轴的实际数值来确定的,这就是数据坐标系。

  • 图像坐标系:图像坐标系是相对于图形区域的坐标系,其范围通常是从0到1。例如,(0, 0) 表示图形区域的左下角,(1, 1) 表示图形区域的右上角。

ax.spines["bottom"].set_position(("data", 0)) 中,"data" 表示将底部边界的位置设置为数据坐标系中的特定位置,这个特定位置是0,也就是y轴上的0值。这样做的效果是,底部边界会移动到数据坐标系中y轴的0值处,从而创建一个从y轴0值开始的底部边框,用于将数据点与坐标轴之间分隔开。

如果你想要设置底部边界的位置相对于图像坐标系,可以使用 "axes" 作为参数,例如 ax.spines["bottom"].set_position(("axes", 0.2)) 将底部边界的位置设置为相对于图像高度的20%处。不过,默认情况下,Matplotlib 使用的是数据坐标系,所以 "data" 是最常见的选择。

同理

ax.yaxis.set_ticks_position("right")
# 到x=0的地方
ax.spines["left"].set_position(("data",0))
plt.show()

在这里插入图片描述

Legend图例

添加图例

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(-3, 3, 50)
y1 = 2*x + 1
y2 = x**2

plt.figure()
#set x limits
plt.xlim((-1, 2))
plt.ylim((-2, 3))

# set new sticks
new_sticks = np.linspace(-1, 2, 5)
plt.xticks(new_sticks)
# set tick labels
plt.yticks([-2,-1.8,-1,1.22,3],['nice','bad','normal','good','best'])
# set line syles
plt.plot(x, y1, label='linear line')
plt.plot(x, y2, color='red', linewidth=1.0, linestyle='--', label='square line')
plt.legend(loc='upper right')#参数 loc='upper right' 表示图例将添加在图中的右上角.
plt.show()

在这里插入图片描述

调整图例位置和名称

我们给每个plt.plot一个变量存储,细心的人会发现为什么变量后面都要加一个,我们先展示结果再解释这里的原因

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(-3, 3, 50)
y1 = 2*x + 1
y2 = x**2

plt.figure()
#set x limits
plt.xlim((-1, 2))
plt.ylim((-2, 3))

# set new sticks
new_sticks = np.linspace(-1, 2, 5)
plt.xticks(new_sticks)
# set tick labels
plt.yticks([-2,-1.8,-1,1.22,3],['nice','bad','normal','good','best'])
# set line syles
l1,=plt.plot(x, y1, label='linear line')
l2,=plt.plot(x, y2, color='red', linewidth=1.0, linestyle='--', label='square line')

plt.legend(handles=[l1,l2],labels=["up","down"],loc='best')#best表示自动选取最佳位置
plt.show()

在这里插入图片描述

l1,=plt.plot(x, y1, label='linear line')
l2=plt.plot(x, y2, color='red', linewidth=1.0, linestyle='--', label='square line')

我们通过这段一个加了,一个没加的代码来解释原因,l1l2 是用来存储 plt.plot() 函数的返回值的变量。这两个变量存储了不同的对象,并且它们在使用上有一些区别。

  1. l1, = plt.plot(x, y1, label='linear line') 中的 , 表示将返回值打包成一个元组,然后将该元组的第一个元素赋给 l1。这是为了确保 l1 只包含一个元素,即 plt.plot() 返回的线条对象。这种方式通常用于获取一个单一的返回值对象,以便在后续的操作中引用它。

  2. l2 = plt.plot(x, y2, color='red', linewidth=1.0, linestyle='--', label='square line') 中的 l2 直接赋值给了 plt.plot() 返回的线条对象。这种方式将返回的对象赋给一个变量,但不打包成元组。

如果你之后需要在图例中使用这些线条,你可以使用 l1l2 中的任何一个,效果都一样。但是没加,的要记得索引第一个元素例如:

plt.legend(handles=[l1, l2[0], labels=['linear line', 'square line'])

Annotation标注

当图线中某些特殊地方需要标注时,我们可以使用 annotation。
matplotlib 中的 annotation 有两种方法, 一种是用 plt 里面的 annotate,一种是直接用 plt 里面的 text 来写标注.

画出基本图

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(-3, 3, 50)
y = 2*x + 1

plt.figure(num=1, figsize=(8, 5),)
plt.plot(x, y,)
plt.show()

在这里插入图片描述

移动坐标

ax = plt.gca()
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')
ax.xaxis.set_ticks_position('bottom')
ax.spines['bottom'].set_position(('data', 0))
ax.yaxis.set_ticks_position('left')
ax.spines['left'].set_position(('data', 0))

在这里插入图片描述
这段代码用于自定义 Matplotlib 图中坐标轴的显示和位置。让我解释一下各行代码的功能:

  1. ax = plt.gca(): 获取当前图中的坐标轴对象。

  2. ax.spines['right'].set_color('none')ax.spines['top'].set_color('none'): 这两行代码将右边和顶部的坐标轴边界的颜色设置为 ‘none’,即不显示右边和顶部的坐标轴线。这通常用于创建只显示左边和底部坐标轴的图。

  3. ax.xaxis.set_ticks_position('bottom')ax.yaxis.set_ticks_position('left'): 这两行代码分别将x轴和y轴的刻度位置设置为底部和左侧。这意味着刻度线将显示在底部和左侧,而不会显示在顶部和右侧。

  4. ax.spines['bottom'].set_position(('data', 0))ax.spines['left'].set_position(('data', 0)): 这两行代码分别将底部和左侧的坐标轴边界的位置设置为数据坐标系中的0值位置。这样做可以创建一个坐标轴交叉点位于数据坐标原点 (0, 0) 处的效果,通常用于将坐标轴原点放在图中的数据点位置。

总之,这段代码用于自定义坐标轴的显示和位置,以满足特定的绘图需求。它可以用于创建只显示左下角坐标轴、设置坐标轴原点等自定义绘图效果。

x0=1
y0=2*x0+1
# x轴坐标从x0到x0,y轴坐标从0到y0,画一条直线
plt.plot([x0,x0],[0,y0],"k--",linewidth=2)#k表示颜色是黑色
# 一个点在(x0,y0),另一个点在(2,4)
plt.scatter([x0,2],[y0,4],s=50,color="b")

在这里插入图片描述

添加注释annotate

plt.annotate(r'$2x+1=%s$' % y0, xy=(x0, y0), xycoords='data', xytext=(+30, -30),
             textcoords='offset points', fontsize=16,
             arrowprops=dict(arrowstyle='->', connectionstyle="arc3,rad=.2"))

这行代码使用 plt.annotate() 函数在图中添加一个带有箭头的文本注释。让我解释其中的参数:

  • r'$2x+1=%s$' % y0: 这是要显示的文本内容,其中 %s 被替换为 y0 的值。这将在注释中显示类似于 “2x+1=5” 的文本。

  • xy=(x0, y0): 这是文本注释的位置,指定为 (x0, y0),即要注释的数据点的坐标。

  • xycoords='data': 这是指定 xy 参数的坐标系,即数据坐标系。

  • xytext=(+30, -30): 这是文本注释文本相对于数据点的偏移量。在这里,文本将在数据点右上方偏移30个像素右,30个像素下。

  • textcoords='offset points': 这是指定 xytext 参数的坐标系,即相对于偏移量的坐标系。

  • fontsize=16: 这是文本的字体大小,设置为16。

  • arrowprops=dict(arrowstyle='->', connectionstyle="arc3,rad=.2"): 这是定义箭头样式的字典。arrowstyle='->' 表示箭头的样式为 “->”,即一个带有尾部的箭头。connectionstyle="arc3,rad=.2" 表示连接线的样式,这里是一条带有弯曲的连接线,弯曲程度由 rad=.2 控制。

综合起来,这行代码的作用是在图中添加一个带有箭头的文本注释,注释的内容是 “2x+1=5”(根据具体的 y0 值),位于数据点 (x0, y0) 的右下方,箭头指向文本注释。这通常用于标记或解释图中的特定数据点或区域。

添加注释text


先跳过吧,上面的我也没怎么弄得很清楚

tick能见度


先跳过

画图种类

Scatter散点图

import matplotlib.pyplot as plt
import numpy as np

n=1024
x=np.random.normal(0,1,n)
y=np.random.normal(0,1,n)
T=np.arctan2(y,x)

plt.scatter(x,y,s=75,c=T,alpha=.5)
plt.xlim(-1.5,1.5)
plt.ylim(-1.5,1.5)
plt.xticks()
plt.yticks()
plt.show()

在这里插入图片描述
这段代码使用了 Matplotlib 和 NumPy 来生成一个散点图。以下是代码的详细解释:

  1. 导入必要的库:导入了 matplotlib.pyplotnumpy 库。

  2. 定义数据点数量 n 为 1024。

  3. 使用 np.random.normal(0, 1, n) 生成了 xy 坐标。这会创建两个包含 1024 个随机数的数组,这些随机数是从均值为 0、标准差为 1 的正态分布中采样得到的。

  4. 使用 np.arctan2(y, x) 计算了每个数据点的角度 T。这个函数计算了每个点的 y/x 的反正切,结果是以弧度表示的角度。

  5. 使用 plt.scatter() 创建了一个散点图。s 参数设置了散点的大小为 75,c 参数将散点的颜色设置为与 T 数组中的值相关联,alpha 参数控制了散点的透明度。

  6. 使用 plt.xlim()plt.ylim() 设置了 x 轴和 y 轴的限制,将图形限制在 x 和 y 轴均在 -1.5 到 1.5 范围内。

  7. 使用 plt.xticks()plt.yticks() 移除了坐标轴上的刻度标签,以使图形更清晰。

  8. 最后,使用 plt.show() 显示图形。

运行此代码将生成一个散点图,其中的点在以原点为中心的正方形内随机分布,每个点的颜色表示它相对于原点的角度。颜色图使用不同的颜色来表示不同的角度,从而创建一个视觉上有趣的图形。

Bar柱状图

生成基本图形

import matplotlib.pyplot as plt
import numpy as np

n=12
x=np.arange(n)
print(x)
y1=(1-x/n)*np.random.uniform(0.5,1.0,n)#均匀分布
y2=(1-x/n)*np.random.uniform(0.5,1.0,n)

plt.bar(x,y1)
plt.bar(x,-y2)

plt.xlim(-0.5,n)
plt.ylim(-1.25,1.25)
plt.xticks()
plt.yticks()
plt.show()

在这里插入图片描述

加颜色和数据

在处理数据时遇到了一个问题

import matplotlib.pyplot as plt
import numpy as np

n=12
x=np.arange(n)

y1=(1-x/n)*np.random.uniform(0.5,1.0,n)#均匀分布
y2=(1-x/n)*np.random.uniform(0.5,1.0,n)

# 用facecolor设置主体颜色,edgecolor设置边框颜色
plt.bar(x,y1,facecolor="#9999ff",edgecolor="green")
plt.bar(x,-y2,facecolor="#ff9999",edgecolor="white")

plt.xlim(-0.5,n)
plt.ylim(-1.25,1.25)
plt.xticks()
plt.yticks()

for x,y in zip(x,y1):
    plt.text(x+0.4,y+0.05,"%.2f" % y,ha="center",va="bottom")

for x,y in zip(x,y2):
    plt.text(x+0.4,-y-0.05,"%.2f" % y,ha="center",va="top")

plt.show()

在这里插入图片描述
错误的意思是x或y2中有一个是不可迭代元素,这可就奇怪了,于是在第一个for循环后分别打印了x和y2的值
在这里插入图片描述
可以很清楚的发现x只剩下一个数字11,确实不是迭代元素,于是我们先把x的数据存入a,在第2个for循环时再将a给for循环,其原因我猜测可能是因为x被使用后里面的数据就会被那拿取走

import matplotlib.pyplot as plt
import numpy as np

n=12
x=np.arange(n)
a=x
y1=(1-x/n)*np.random.uniform(0.5,1.0,n)#均匀分布
y2=(1-x/n)*np.random.uniform(0.5,1.0,n)

# 用facecolor设置主体颜色,edgecolor设置边框颜色
plt.bar(x,y1,facecolor="#9999ff",edgecolor="green")
plt.bar(x,-y2,facecolor="#ff9999",edgecolor="white")

plt.xlim(-0.5,n)
plt.ylim(-1.25,1.25)
plt.xticks()
plt.yticks()

for x,y in zip(x,y1):
    plt.text(x+0.4,y+0.05,"%.2f" % y,ha="center",va="bottom")

for x,y in zip(a,y2):
    plt.text(x+0.4,-y-0.05,"%.2f" % y,ha="center",va="top")

plt.show()

在这里插入图片描述
for x,y in zip(x,y1):
这行代码是一个 for 循环,它使用 zip(x, y1) 迭代两个数组 xy1 中的元素。让我们来详细解释这行代码的每个部分:

  • for x, y in: 这是一个 for 循环的开始,它创建了两个迭代变量 xy,用于遍历 zip(x, y1) 中的元素。在每次迭代中,x 将取到 x 数组的当前元素,而 y 将取到 y1 数组的当前元素。

  • zip(x, y1): 这是一个内置函数 zip(),它用于将两个或多个可迭代对象逐个元素地配对。在这里,它将 xy1 两个数组逐个元素地配对在一起,以便在循环中一次处理它们的对应元素。

所以,这行代码的作用是遍历 xy1 数组中的元素,并在每次循环迭代中,x 变量将包含 x 数组的当前元素的值,而 y 变量将包含 y1 数组的当前元素的值。这通常用于同时访问两个相关数组的元素,例如,在此处用于在条形图的上方添加文本标签。

plt.text(x+0.4,y+0.05,"%.2f" % y,ha="center",va="bottom")
这行代码使用 plt.text() 函数向图形中添加文本标签,以显示条形图上方的数值。让我们逐个解释其中的参数和操作:

  • x+0.4: 这是文本的横坐标位置,x 是条形图的横坐标位置,+0.4 是一个偏移量,将文本位置稍微向右偏移,以便文本位于条形的中心。

  • y+0.05: 这是文本的纵坐标位置,y 是条形图的高度,+0.05 是一个偏移量,将文本位置稍微向上偏移,以便文本位于条形的顶部。

  • "%.2f" % y: 这是要显示的文本内容,"%.2f" 是一个格式字符串,用于显示 y 的值保留两位小数。% yy 的值插入到格式字符串中。

  • ha="center": 这是文本的水平对齐方式,设为 "center" 表示文本在水平方向上居中对齐。

  • va="bottom": 这是文本的垂直对齐方式,设为 "bottom" 表示文本在垂直方向上靠近底部对齐。

通过这行代码,我们实现了在每个条形图的上方显示其高度值,并进行了一些微调,以使文本适当地位于条形的中心上方。

Contours等高线图

数据集即三维点 (x,y) 和对应的高度值,共有256个点。高度值使用一个 height function f(x,y) 生成。 x, y 分别是在区间 [-3,3] 中均匀分布的256个值,并用meshgrid在二维平面中将每一个x和每一个y分别对应起来,编织成栅格:


Image图片


3D数据


多图合并显示

动画

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1016466.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

nat的基础配置(动态nat,nat server)

目录 1.静态nat 2.动态nat (1)配置公网地址池 (2)配置acl,匹配做nat转换的源 (3)将源转换为公网地址,其中no-pat表示不做端口转化,只做一对一的地址转换 3.nat ser…

《向量数据库指南》——向量数据库Milvus Cloud为什么选择开源?

开源对我们来说是一种信仰。从最早开始研发向量数据库的时候,我们就相信应该让更多人了解并使用优秀的技术,这是我们选择做开源的原因。 无论是在 AI 领域还是其他领域,我们希望技术不会被少数大公司垄断。在向量数据库问世之前,阿…

python:优化一EXCEL统计用类封装一下

# encoding: utf-8 # 版权所有 2023 涂聚文有限公司 # 许可信息查看: # 描述: # Author : geovindu,Geovin Du 涂聚文. # IDE : PyCharm 2023.1 python 311 # Datetime : 2023/9/17 5:40 # User : geovindu # Product : PyCharm # Proj…

JSON和全局异常处理

目录 1️⃣JSON 一、什么是json? 二、与javascript的关系 三、语法格式 四、注意事项 五、总结 六,使用json 1导入pom.xml依赖 2.配置spring-mvc.xml 3. ResponseBody注解使用 创建一个web层控制器 编写ClazzBiz 实现接口 测试: …

C#,数值计算——Hashfn2的计算方法与源程序

1 文本格式 using System; using System.Collections; using System.Collections.Generic; namespace Legalsoft.Truffer { public class Hashfn2 { private static ulong[] hashfn_tab { get; set; } new ulong[256]; private ulong h { get; set;…

【2023年11月第四版教材】第13章《资源管理》(第三部分)

第13章《资源管理》(第部分) 4 管理过程4.1 数据表现★★★4.2 资源管理计划★★★4.2 团队章程★★★ 5 估算活动资源 4 管理过程 组过程输入工具和技术输出规划1.规划资源管理1.项目章程2.项目管理计划(质量管理计划、范围基准&#xff09…

elasticsearch5-RestAPI操作

个人名片: 博主:酒徒ᝰ. 个人简介:沉醉在酒中,借着一股酒劲,去拼搏一个未来。 本篇励志:三人行,必有我师焉。 本项目基于B站黑马程序员Java《SpringCloud微服务技术栈》,SpringCloud…

Python 布尔类型和比较运算符

视频版教程 Python3零基础7天入门实战视频教程 布尔( bool)表达现实生活中的逻辑,即真和假,True表示真,False表示假。 实例: # 布尔类型定义 b1 True b2 False print(f"b1{b1},类型是{type(b1)}") prin…

分类预测 | MATLAB实现WOA-CNN-LSTM-Attention数据分类预测

分类预测 | MATLAB实现WOA-CNN-LSTM-Attention数据分类预测 目录 分类预测 | MATLAB实现WOA-CNN-LSTM-Attention数据分类预测分类效果基本描述模型描述程序设计参考资料 分类效果 基本描述 1.MATLAB实现WOA-CNN-LSTM-Attention数据分类预测,运行环境Matlab2021b及以…

Vue3+Ts+Vite项目(第十五篇)——tailwindcss安装及使用详解,css原子化如何实现

文章目录 一、装包二、初始化2.1 终端执行如下命令2.2 postcss.config.js 文件中2.3 tailwind.config.js 文件中 三、样式文件3.1 新建 tailwind.css 文件3.2 main.ts 中引入 四、使用4.1 写入类名即可4.2 简单讲解 五、插件5.1 安装 Tailwind CSS IntelliSense5.2 使用效果 六…

系统架构设计高级技能 · 构件与中间件技术

点击进入系列文章目录 现在的一切都是为将来的梦想编织翅膀,让梦想在现实中展翅高飞。 Now everything is for the future of dream weaving wings, let the dream fly in reality. 系统架构设计高级技能 构件与中间件技术 一、构件的定义二、构件系统架构特性三…

Vue ——09、路由模式,404和路由勾子

路由嵌套,参数传递及重定向 一、路由模式(有#号,跟没#号)二、404三、路由勾子四、在钩子函数中使用异步请求————————创作不易,如觉不错,随手点赞,关注,收藏(* ̄︶…

STM32 CubeMx教程 -- 基础知识及配置使用教程

文章目录 前言一、STM32CubeMx 界面介绍File 界面Windows 界面Help 界面Updater Settings 界面 二、STM32CubeMx 使用教程新建工程配置RCC时钟参数配置SYS参数配置时钟树Project(工程设置)Code Generator(代码生成器)工程创建 三、…

Day46:项目-购物车案例

购物车案例 准备工作 首页默认加载,其余页面懒加载 调用defineStore方法构建store 入口main做对应配置,找指南,快速开始,把elementplus引入进来 import { createApp } from "vue"; import { createPinia } from &qu…

基于香橙派和SU-03T 使用Linux实现语音控制刷抖音

硬件介绍 SU-03T之前在小车的时候使用过,详见:语音小车---6 最终整合_mjmmm的博客-CSDN博客 按照下图进行接线: 项目需求 通过语音指令来控制安卓手机刷抖音,可以实现视频切换和点赞等功能: 1. 开机播报“你好&a…

产品经理-战略-战略的含义和层级

引言 22年老板在听我做部门人员数量汇报时,当场就给我们部门员工做能力标签,过了几天就输出了一个公司所有技术岗位的能力标签。其中有一项是战略思维,该项满分是5分,我们部门同事绝大部分人都只有2分,我自己也就3…

数据结构-leetcode-环形链表Ⅱ

有了上一篇的基础,做这一篇会相对容易些,没看上一篇的一定要去看看再来。 先看题: 解题图解: 1.首先要使快慢指针相遇 2. 代码如下: struct ListNode *detectCycle(struct ListNode *head) {struct ListNode * fasthe…

IF,AND,OR 或嵌套 IF 在 Excel 中不是逻辑函数

事情并非总是我们希望的那样。 意外的事情可能发生。 例如,假设您必须将数字相除。 尝试将任何数字除以零(0)都会产生错误。 在这种情况下,逻辑功能很方便。 在本教程中,我们将涵盖以下主题。 在本教程中,…

企业架构LNMP学习笔记53

PHP扩展安装: server01和server03上安装redis扩展: 解压编译安装: shell > tar xvf redis-4.3.0.tgz shell > cd redis-4.3.0 shell > phpize shell > ./configure && make && make install 配置文件php.ini&…

JVM——3.StringTable字符串常量池

这篇文章我们来讲一下StringTable字符串常量池 目录 1.引例 2.StringTable的特性 3.StringTable的位置 4.StringTable的垃圾回收、 5.StringTable性能调优 6.总结 1.引例 首先,我们来看下面的这段程序,请思考最终的输出结果。 输出结果&#xff…