python画神经网络图
代码1(画神经网络连接图)
from math import cos, sin, atan
import matplotlib.pyplot as plt
# 注意这里并没有用到这个networkx这个库,完全是根据matploblib这个库来画的。
class Neuron():def __init__(self, x, y,radius,name=None):self.x = xself.y = yself.radius = radiusself.name = namedef draw(self):circle = plt.Circle((self.x, self.y), radius=self.radius, fill=False)plt.gca().add_patch(circle)if(self.name is not None):plt.text(self.x,self.y,self.name)#注意这个写法,现在整个图是水平的,不再是竖直的
def plotConnection(neuron1,neuron2):neuron_radius= neuron1.radiusangle = atan((neuron2.y - neuron1.y)/float(neuron2.x - neuron1.x))x_adjustment = neuron_radius * cos(angle)y_adjustment = neuron_radius * sin(angle)line = plt.Line2D((neuron1.x + x_adjustment, neuron2.x - x_adjustment), (neuron1.y + y_adjustment, neuron2.y - y_adjustment),color="gray")plt.gca().add_line(line)class Connection():def __init__(self,neuron1,neuron2):self.n1 = neuron1self.n2 = neuron2 pass#
radius =0.05
n1 = Neuron(1,1.1,radius,name="n1")
n1.draw()n2 = Neuron(1,1.3,radius,name="n2")
n2.draw()n3 = Neuron(1,1.5,radius,name="n3")
n3.draw()n4 = Neuron(1,1.7,radius)
n4.draw()n5 = Neuron(1,1.9,radius)
n5.draw()n6 = Neuron(2,1.0,radius)
n6.draw()n7 = Neuron(2,1.2,radius,name="n7")
n7.draw()n8 = Neuron(2,1.4,radius)
n8.draw()n9 = Neuron(2,1.6,radius,name="n9")
n9.draw()n10 = Neuron(2,1.8,radius)
n10.draw()n11 = Neuron(2,2.0,radius)
n11.draw()plotConnection(n2,n7)
plotConnection(n1,n9)
plotConnection(n3,n8)
plt.axis("scaled")
plt.show()## 现在这个地方有一个问题,就是这个图形应该是什么样子的
结果如下

代码2(画神经网络层连接)
from math import cos, sin, atan
import matplotlib.pyplot as plt
from itertools import product# 注意这里并没有用到这个networkx这个库,完全是根据matploblib这个库来画的。
class Neuron():def __init__(self, x, y,radius,name=None):self.x = xself.y = yself.radius = radiusself.name = namedef draw(self):circle = plt.Circle((self.x, self.y), radius=self.radius, fill=False)plt.gca().add_patch(circle)if(self.name is not None):plt.text(self.x,self.y,self.name)# 我是水平方向构造这个Layer类
class NeuronLayer():def __init__(self,positionX,initY,numNeurons,numNeuronsWidestLayer,vertical_distance_between_neurons,radius):# positionX:水平位置# numNeurons:神经元个数# numNeuronsWidestLayer: 为了居中,我需要知道最大的宽度, 并且计算出每个神经元的纵轴位置# vertical_distance_between_neurons: 相邻神经元的margin# radius: 每个神经元的半径self.positionX = positionX self.initY = initYself.numNeurons = numNeuronspositionY = initY + vertical_distance_between_neurons * (numNeuronsWidestLayer - numNeurons) / 2self.NeuronList=[]for i in range(numNeurons):neu = Neuron(self.positionX,positionY,radius)neu.draw()self.NeuronList.append(neu)positionY = positionY + vertical_distance_between_neurons#注意这个写法,现在整个图是水平的,不再是竖直的
def TwoNeuronsConnection(neuron1,neuron2):neuron_radius= neuron1.radiusangle = atan((neuron2.y - neuron1.y)/float(neuron2.x - neuron1.x))x_adjustment = neuron_radius * cos(angle)y_adjustment = neuron_radius * sin(angle)line = plt.Line2D((neuron1.x + x_adjustment, neuron2.x - x_adjustment), (neuron1.y + y_adjustment, neuron2.y - y_adjustment),color="gray",linewidth=0.2)plt.gca().add_line(line)def TwoLayersConnection(NeuronLayer1,NeuronLayer2):Layer1 = NeuronLayer1.NeuronListLayer2 = NeuronLayer2.NeuronListfor neuron1,neuron2 in product(Layer1,Layer2):TwoNeuronsConnection(neuron1,neuron2)##############################################
radius =0.05Layer1 = NeuronLayer(positionX=1,initY= 0.0,numNeurons=4,numNeuronsWidestLayer=10,vertical_distance_between_neurons=0.2,radius=0.05)
Layer2= NeuronLayer(positionX=2,initY= 0.0,numNeurons=10,numNeuronsWidestLayer=10,vertical_distance_between_neurons=0.2,radius=0.05)
Layer3 = NeuronLayer(positionX=3,initY= 0.0,numNeurons=8,numNeuronsWidestLayer=10,vertical_distance_between_neurons=0.2,radius=0.05)
Layer4 = NeuronLayer(positionX=4,initY= 0.0,numNeurons=5,numNeuronsWidestLayer=10,vertical_distance_between_neurons=0.2,radius=0.05)
Layer5 = NeuronLayer(positionX=5,initY= 0.0,numNeurons=1,numNeuronsWidestLayer=10,vertical_distance_between_neurons=0.2,radius=0.05)TwoLayersConnection(Layer1,Layer2)
TwoLayersConnection(Layer2,Layer3)
TwoLayersConnection(Layer3,Layer4)
TwoLayersConnection(Layer4,Layer5)########################
plt.axis("scaled")
#plt.axis('off')
plt.show()
########################## 现在这个地方有一个问题,就是这个图形应该是什么样子的
## 这个
结果如下

代码3(画两个子网络)
from math import cos, sin, atan
import matplotlib.pyplot as plt
from itertools import product# 注意这里并没有用到这个networkx这个库,完全是根据matploblib这个库来画的。
class Neuron():def __init__(self, x, y,radius,name=None):self.x = xself.y = yself.radius = radiusself.name = namedef draw(self):circle = plt.Circle((self.x, self.y), radius=self.radius, fill=False)plt.gca().add_patch(circle)if(self.name is not None):plt.text(self.x,self.y,self.name)# 我是水平方向构造这个Layer类
class NeuronLayer():def __init__(self,positionX,initY,numNeurons,numNeuronsWidestLayer,vertical_distance_between_neurons,radius):# positionX:水平位置# numNeurons:神经元个数# numNeuronsWidestLayer: 为了居中,我需要知道最大的宽度, 并且计算出每个神经元的纵轴位置# vertical_distance_between_neurons: 相邻神经元的margin# radius: 每个神经元的半径self.positionX = positionX self.initY = initYself.numNeurons = numNeuronspositionY = initY + vertical_distance_between_neurons * (numNeuronsWidestLayer - numNeurons) / 2self.NeuronList=[]for i in range(numNeurons):neu = Neuron(self.positionX,positionY,radius)neu.draw()self.NeuronList.append(neu)positionY = positionY + vertical_distance_between_neurons#注意这个写法,现在整个图是水平的,不再是竖直的
def TwoNeuronsConnection(neuron1,neuron2):neuron_radius= neuron1.radiusangle = atan((neuron2.y - neuron1.y)/float(neuron2.x - neuron1.x))x_adjustment = neuron_radius * cos(angle)y_adjustment = neuron_radius * sin(angle)line = plt.Line2D((neuron1.x + x_adjustment, neuron2.x - x_adjustment), (neuron1.y + y_adjustment, neuron2.y - y_adjustment),color="gray",linewidth=0.2)plt.gca().add_line(line)def TwoLayersConnection(NeuronLayer1,NeuronLayer2):Layer1 = NeuronLayer1.NeuronListLayer2 = NeuronLayer2.NeuronListfor neuron1,neuron2 in product(Layer1,Layer2):TwoNeuronsConnection(neuron1,neuron2)##############################################
radius =0.05Layer11 = NeuronLayer(positionX=1,initY= 0.0,numNeurons=4,numNeuronsWidestLayer=10,vertical_distance_between_neurons=0.25,radius=0.05)
Layer12= NeuronLayer(positionX=1,initY= 1,numNeurons=4,numNeuronsWidestLayer=10,vertical_distance_between_neurons=0.25,radius=0.05)
Layer21 = NeuronLayer(positionX=2,initY= 0.0,numNeurons=10,numNeuronsWidestLayer=10,vertical_distance_between_neurons=0.15,radius=0.05)
Layer22 = NeuronLayer(positionX=2,initY= 1.8,numNeurons=10,numNeuronsWidestLayer=10,vertical_distance_between_neurons=0.15,radius=0.05)Layer31 = NeuronLayer(positionX=3,initY= 0.0,numNeurons=8,numNeuronsWidestLayer=10,vertical_distance_between_neurons=0.15,radius=0.05)
Layer32 = NeuronLayer(positionX=3,initY= 1.8,numNeurons=8,numNeuronsWidestLayer=10,vertical_distance_between_neurons=0.15,radius=0.05)
Layer41 = NeuronLayer(positionX=4,initY= 0.0,numNeurons=5,numNeuronsWidestLayer=10,vertical_distance_between_neurons=0.15,radius=0.05)
Layer42 = NeuronLayer(positionX=4,initY= 1.8,numNeurons=5,numNeuronsWidestLayer=10,vertical_distance_between_neurons=0.15,radius=0.05)Layer51 = NeuronLayer(positionX=5,initY= 0.0,numNeurons=1,numNeuronsWidestLayer=10,vertical_distance_between_neurons=0.15,radius=0.05)
Layer52 = NeuronLayer(positionX=5,initY= 1.8,numNeurons=1,numNeuronsWidestLayer=10,vertical_distance_between_neurons=0.15,radius=0.05)TwoLayersConnection(Layer11,Layer21)
TwoLayersConnection(Layer11,Layer22)
TwoLayersConnection(Layer12,Layer21)
TwoLayersConnection(Layer12,Layer22)TwoLayersConnection(Layer21,Layer31)
TwoLayersConnection(Layer22,Layer32)TwoLayersConnection(Layer31,Layer41)
TwoLayersConnection(Layer32,Layer42)TwoLayersConnection(Layer41,Layer51)
TwoLayersConnection(Layer42,Layer52)
########################
plt.axis("scaled")
#plt.axis('off')
plt.show()
########################## 现在这个地方有一个问题,就是这个图形应该是什么样子的
## 这个
结果如下

添加变量
from math import cos, sin, atan
import matplotlib.pyplot as plt
from itertools import product
# mac显示中文##
plt.rcParams['font.sans-serif']=['Songti SC'] #用来正常显示中文标签# 首先实现Neuron类
class Neuron():def __init__(self, x, y,radius,name=None):self.x = xself.y = yself.radius = radiusself.name = namedef draw(self):circle = plt.Circle((self.x, self.y), radius=self.radius, fill=False)plt.gca().add_patch(circle)if(self.name is not None):plt.text(self.x,self.y,self.name)# 水平方向构造Layer类
class NeuronLayer():def __init__(self,positionX,initY,numNeurons,numNeuronsWidestLayer,vertical_distance_between_neurons,radius):# positionX:水平位置# initY: 神经元的初始位置# numNeurons:神经元个数# numNeuronsWidestLayer: 为了居中,我需要知道最大的宽度, 并且计算出每个神经元的纵轴位置# vertical_distance_between_neurons: 相邻神经元的margin# radius: 每个神经元的半径self.positionX = positionX self.initY = initYself.numNeurons = numNeuronspositionY = initY + vertical_distance_between_neurons * (numNeuronsWidestLayer - numNeurons) / 2self.NeuronList=[]for i in range(numNeurons):neu = Neuron(self.positionX,positionY,radius)neu.draw()self.NeuronList.append(neu)positionY = positionY + vertical_distance_between_neuronsclass PlotNeuralConnection:def __init__():pass# 连接两个神经元
def TwoNeuronsConnection(neuron1,neuron2):neuron_radius= neuron1.radiusangle = atan((neuron2.y - neuron1.y)/float(neuron2.x - neuron1.x))x_adjustment = neuron_radius * cos(angle)y_adjustment = neuron_radius * sin(angle)##################### 添加直线 ###########################line = plt.Line2D((neuron1.x + x_adjustment, neuron2.x - x_adjustment), (neuron1.y + y_adjustment, neuron2.y - y_adjustment),color="gray",linewidth=0.2)plt.gca().add_line(line)############################################################################## 添加箭头(不好看) ############################ startX,startY = neuron1.x + x_adjustment,neuron1.y + y_adjustment# deltaX,deltaY = neuron2.x - x_adjustment - startX ,neuron2.y - y_adjustment - startY # plt.gca().arrow(startX,startY,deltaX,deltaY, width=0.001, color="gray", # head_width=0.01, head_length=0.05, overhang=1.0,length_includes_head=True)########################################################## 连接相邻两层神经元
def TwoLayersConnection(NeuronLayer1,NeuronLayer2):Layer1 = NeuronLayer1.NeuronListLayer2 = NeuronLayer2.NeuronListfor neuron1,neuron2 in product(Layer1,Layer2):TwoNeuronsConnection(neuron1,neuron2)##############################################
radius =0.075
Layer11 = NeuronLayer(positionX=1,initY= 0.0,numNeurons=4,numNeuronsWidestLayer=10,vertical_distance_between_neurons=0.25,radius=radius)
Layer12= NeuronLayer(positionX=1,initY= 1,numNeurons=4,numNeuronsWidestLayer=10,vertical_distance_between_neurons=0.25,radius=radius)
Layer21 = NeuronLayer(positionX=2,initY= 0.0,numNeurons=10,numNeuronsWidestLayer=10,vertical_distance_between_neurons=0.15,radius=radius)
Layer22 = NeuronLayer(positionX=2,initY= 1.8,numNeurons=10,numNeuronsWidestLayer=10,vertical_distance_between_neurons=0.15,radius=radius)
Layer31 = NeuronLayer(positionX=3,initY= 0.0,numNeurons=8,numNeuronsWidestLayer=10,vertical_distance_between_neurons=0.15,radius=radius)
Layer32 = NeuronLayer(positionX=3,initY= 1.8,numNeurons=8,numNeuronsWidestLayer=10,vertical_distance_between_neurons=0.15,radius=radius)
Layer41 = NeuronLayer(positionX=4,initY= 0.0,numNeurons=5,numNeuronsWidestLayer=10,vertical_distance_between_neurons=0.15,radius=radius)
Layer42 = NeuronLayer(positionX=4,initY= 1.8,numNeurons=5,numNeuronsWidestLayer=10,vertical_distance_between_neurons=0.15,radius=radius)
Layer51 = NeuronLayer(positionX=5,initY= 0.0,numNeurons=1,numNeuronsWidestLayer=10,vertical_distance_between_neurons=0.15,radius=radius)
Layer52 = NeuronLayer(positionX=5,initY= 1.8,numNeurons=1,numNeuronsWidestLayer=10,vertical_distance_between_neurons=0.15,radius=radius)
TwoLayersConnection(Layer11,Layer21)
TwoLayersConnection(Layer11,Layer22)
TwoLayersConnection(Layer12,Layer21)
TwoLayersConnection(Layer12,Layer22)
TwoLayersConnection(Layer21,Layer31)
TwoLayersConnection(Layer22,Layer32)
TwoLayersConnection(Layer31,Layer41)
TwoLayersConnection(Layer32,Layer42)
TwoLayersConnection(Layer41,Layer51)
TwoLayersConnection(Layer42,Layer52)
########################################################################################################################## 添加变量名 ###########################
cnt = 1
for neu in Layer11.NeuronList:plt.text(neu.x -0.5,neu.y-0.05,"变量{}".format(9-cnt))cnt=cnt+1
cnt = 1
for neu in Layer12.NeuronList:plt.text(neu.x -0.5,neu.y-0.05,"变量{}".format(5-cnt))cnt=cnt+1
################################################################################################# 添加上箭头 ####################################################################################################################### 去除画图边框 ##############################
plt.axis("scaled")
plt.axis('off')
plt.show()
####################################################################
结果如下

初稿1
from math import cos, sin, atan
import matplotlib.pyplot as plt
from itertools import product
# mac显示中文##
plt.rcParams['font.sans-serif']=['Songti SC'] #用来正常显示中文标签# 首先实现Neuron类
class Neuron():def __init__(self, x, y,radius,name=None):self.x = xself.y = yself.radius = radiusself.name = namedef draw(self):circle = plt.Circle((self.x, self.y), radius=self.radius, fill=False)plt.gca().add_patch(circle)if(self.name is not None):plt.text(self.x,self.y,self.name)# 水平方向构造Layer类
class NeuronLayer():def __init__(self,positionX,initY,numNeurons,numNeuronsWidestLayer,vertical_distance_between_neurons,radius):# positionX:水平位置# initY: 神经元的初始位置# numNeurons:神经元个数# numNeuronsWidestLayer: 为了居中,我需要知道最大的宽度, 并且计算出每个神经元的纵轴位置# vertical_distance_between_neurons: 相邻神经元的margin# radius: 每个神经元的半径self.positionX = positionX self.initY = initYself.numNeurons = numNeuronspositionY = initY + vertical_distance_between_neurons * (numNeuronsWidestLayer - numNeurons) / 2self.NeuronList=[]for i in range(numNeurons):neu = Neuron(self.positionX,positionY,radius)neu.draw()self.NeuronList.append(neu)positionY = positionY + vertical_distance_between_neuronsclass PlotNeuralConnection:def __init__():pass# 连接两个神经元
def TwoNeuronsConnection(neuron1,neuron2):neuron_radius= neuron1.radiusangle = atan((neuron2.y - neuron1.y)/float(neuron2.x - neuron1.x))x_adjustment = neuron_radius * cos(angle)y_adjustment = neuron_radius * sin(angle)##################### 添加直线 ###########################line = plt.Line2D((neuron1.x + x_adjustment, neuron2.x - x_adjustment), (neuron1.y + y_adjustment, neuron2.y - y_adjustment),color="#4d4d4d",linewidth=0.2)plt.gca().add_line(line)############################################################################## 添加箭头(不好看) ############################ startX,startY = neuron1.x + x_adjustment,neuron1.y + y_adjustment# deltaX,deltaY = neuron2.x - x_adjustment - startX ,neuron2.y - y_adjustment - startY # plt.gca().arrow(startX,startY,deltaX,deltaY, width=0.001, color="#4d4d4d", # head_width=0.01, head_length=0.05, overhang=1.0,length_includes_head=True)########################################################## 连接相邻两层神经元
def TwoLayersConnection(NeuronLayer1,NeuronLayer2):Layer1 = NeuronLayer1.NeuronListLayer2 = NeuronLayer2.NeuronListfor neuron1,neuron2 in product(Layer1,Layer2):TwoNeuronsConnection(neuron1,neuron2)##############################################
radius =0.075
Layer11 = NeuronLayer(positionX=1,initY= 0.0,numNeurons=4,numNeuronsWidestLayer=10,vertical_distance_between_neurons=0.25,radius=radius)
Layer12= NeuronLayer(positionX=1,initY= 1,numNeurons=4,numNeuronsWidestLayer=10,vertical_distance_between_neurons=0.25,radius=radius)
Layer21 = NeuronLayer(positionX=2,initY= 0.0,numNeurons=10,numNeuronsWidestLayer=10,vertical_distance_between_neurons=0.15,radius=radius)
Layer22 = NeuronLayer(positionX=2,initY= 1.8,numNeurons=10,numNeuronsWidestLayer=10,vertical_distance_between_neurons=0.15,radius=radius)
Layer31 = NeuronLayer(positionX=3,initY= 0.0,numNeurons=8,numNeuronsWidestLayer=10,vertical_distance_between_neurons=0.15,radius=radius)
Layer32 = NeuronLayer(positionX=3,initY= 1.8,numNeurons=8,numNeuronsWidestLayer=10,vertical_distance_between_neurons=0.15,radius=radius)
Layer41 = NeuronLayer(positionX=4,initY= 0.0,numNeurons=5,numNeuronsWidestLayer=10,vertical_distance_between_neurons=0.15,radius=radius)
Layer42 = NeuronLayer(positionX=4,initY= 1.8,numNeurons=5,numNeuronsWidestLayer=10,vertical_distance_between_neurons=0.15,radius=radius)
Layer51 = NeuronLayer(positionX=5,initY= 0.0,numNeurons=1,numNeuronsWidestLayer=10,vertical_distance_between_neurons=0.15,radius=radius)
Layer52 = NeuronLayer(positionX=5,initY= 1.8,numNeurons=1,numNeuronsWidestLayer=10,vertical_distance_between_neurons=0.15,radius=radius)
Layer61 = NeuronLayer(positionX=6,initY= 0.0,numNeurons=1,numNeuronsWidestLayer=10,vertical_distance_between_neurons=0.15,radius=radius)
Layer62 = NeuronLayer(positionX=6,initY= 1.8,numNeurons=1,numNeuronsWidestLayer=10,vertical_distance_between_neurons=0.15,radius=radius)
TwoLayersConnection(Layer11,Layer21)
TwoLayersConnection(Layer11,Layer22)
TwoLayersConnection(Layer12,Layer21)
TwoLayersConnection(Layer12,Layer22)
TwoLayersConnection(Layer21,Layer31)
TwoLayersConnection(Layer22,Layer32)
TwoLayersConnection(Layer31,Layer41)
TwoLayersConnection(Layer32,Layer42)
TwoLayersConnection(Layer41,Layer51)
TwoLayersConnection(Layer42,Layer52)
TwoLayersConnection(Layer51,Layer61)
TwoLayersConnection(Layer52,Layer62)
######################################################################################################### 添加末尾神经元 #################################################################
posX1,posY1 = Layer52.NeuronList[0].x, Layer52.NeuronList[0].y
neu1 = Neuron(posX1,posY1 +0.2, radius=radius)
neu1.draw()
TwoNeuronsConnection(neu1,Layer62.NeuronList[0])posX2,posY2= Layer51.NeuronList[0].x, Layer51.NeuronList[0].y
neu2 = Neuron(posX2,posY2 + 0.2, radius=radius)
neu2.draw()
TwoNeuronsConnection(neu2,Layer61.NeuronList[0])neu3 = Neuron(posX2,posY2 - 0.2, radius=radius)
neu3.draw()
TwoNeuronsConnection(neu3,Layer61.NeuronList[0])
######################################################################################################### 添加神经元标识##########################################################
plt.text(Layer62.NeuronList[0].x+0.2,Layer62.NeuronList[0].y-0.05,"输出$\hat{\mu}$")
plt.text(Layer61.NeuronList[0].x+0.2,Layer61.NeuronList[0].y-0.05,"输出$\hat{\phi}/{\omega}$")
plt.text(neu2.x-0.2,neu2.y+0.15,"$log(1/{\omega})$")############################## 添加变量名 ###########################
cnt = 1
for neu in Layer11.NeuronList:plt.text(neu.x -0.5,neu.y-0.04,"变量{}".format(9-cnt))cnt=cnt+1
cnt = 1
for neu in Layer12.NeuronList:plt.text(neu.x -0.5,neu.y-0.04,"变量{}".format(5-cnt))cnt=cnt+1
################################################################################################# 添加上箭头 ###########################
line1 = plt.Line2D((1, 1), (2.8,3.5),color="#4d4d4d",linewidth=0.2)
plt.gca().add_line(line1)line2 = plt.Line2D((1, 5), (3.5,3.5),color="#4d4d4d",linewidth=0.2)
plt.gca().add_line(line2)
plt.text(2.5,3.6,"$\mu$参数通过GLM连接")plt.gca().arrow(5,3.5, 0, -0.7, width=0.001, color="#4d4d4d", head_width=0.05, head_length=0.05, overhang=1.0,length_includes_head=True,linewidth=0.2)
################################################################################################# 添加下箭头 ###########################
line1 = plt.Line2D((1, 1), (0.4,-0.3),color="#4d4d4d",linewidth=0.2)
plt.gca().add_line(line1)line2 = plt.Line2D((1, 5), (-0.3,-0.3),color="#4d4d4d",linewidth=0.2)
plt.gca().add_line(line2)
plt.text(2.5,-0.5,"$\phi$参数通过GLM连接")plt.gca().arrow(5,-0.3, 0, 0.7, color="#4d4d4d", head_width=0.05, head_length=0.05, overhang=1.0,length_includes_head=True,linewidth=0.2)
############################################################################################ 去除画图边框 ##############################
plt.axis("scaled")
plt.axis('off')
plt.savefig("./network.pdf")
plt.show()
####################################################################
结果如下

相关文章:
python画神经网络图
代码1(画神经网络连接图) from math import cos, sin, atan import matplotlib.pyplot as plt # 注意这里并没有用到这个networkx这个库,完全是根据matploblib这个库来画的。 class Neuron():def __init__(self, x, y,radius,nameNone):self.x xself.y …...
Bash 编程精粹:从新手到高手的全面指南之逻辑控制
在 Unix 和 Linux 系统中,Bash(Bourne-Again Shell)是一种广泛使用的 shell,提供了强大的脚本编程能力。本文将详细介绍 Bash 脚本中的逻辑控制结构,包括条件判断、分支选择、循环控制以及退出控制等内容。 条件判断&…...
自动化运维(三十)Ansible 实战之自定义插件
Ansible 自定义插件允许你扩展其功能,以满足特定的自动化需求。Ansible 支持多种类型的插件开发,如动态库存、查找、回调、过滤器、变量等。这里我们将通过实例,介绍如何开发、部署和使用一个自定义插件。 开发自定义查找插件 查找插件用于在 Ansible 任务中动态获取数据。…...
实习僧网站的实习岗位信息分析
目录 背景描述数据说明数据集来源问题描述分析目标以及导入模块1. 数据导入2. 数据基本信息和基本处理3. 数据处理3.1 新建data_clean数据框3.2 数值型数据处理3.2.1 “auth_capital”(注册资本)3.2.2 “day_per_week”(每周工作天数…...
C语言中局部变量和全局变量是否可以重名?为什么?
可以重名 在C语言中, 局部变量指的是定义在函数内的变量, 全局变量指的是定义在函数外的变量 他们在程序中的使用方法是不同的, 当重名时, 局部变量在其所在的作用域内具有更高的优先级, 会覆盖或者说隐藏同名的全局变量 具体来说: 局部变量的生命周期只在函数内部,如果出了…...
小程序中配置scss
找到:project.config.json 文件 setting 模块下添加: "useCompilerPlugins": ["sass","其他的样式类型"] 配置完成后,重启开发工具,并新建文件 结果:...
ZYNQ-Vitis(SDK)裸机开发之(四)PS端MIO和EMIO的使用
目录 一、ZYNQ中MIO和EMIO简介 二、Vivado中搭建block design 1.配置PS端MIO: 2.配置PS端EMIO: 三、Vitis中新建工程进行GPIO控制 1. GPIO操作头文件gpio_hdl.h: 2.GPIO操作源文件gpio_hdl.c: 3.main函数进行调用 例程开发…...
聊聊jvm中内存模型的坑
jvm线程的内存模型 看图,简单来说线程中操作的变量是副本。在并发情况下,如果数据发生变更,副本的数据就变为脏数据。这个时候就会有并发问题。 参考:https://www.cnblogs.com/yeyang/p/12580682.html 怎么解决并发问题 解决的…...
DevOps已死?2024年的DevOps将如何发展
随着我们进入2024年,DevOps也发生了变化。新兴的技术、变化的需求和发展的方法正在重新定义有效实施DevOps实践。 IDC预测显示,未来五年,支持DevOps实践的产品市场继续保持健康且快速增长,2022年-2027年的复合年增长率࿰…...
appium控制手机一直从下往上滑动
用于使用Appium和Selenium WebDriver在Android设备上滚动设置应用程序的界面。具体来说,它通过WebDriverWait和expected_conditions等待元素出现,然后使用ActionChains移动到该元素并执行滚动动作。在setUp中,它初始化了Appium的WebDriver和c…...
为什么光伏探勘测绘需要无人机?
随着全球对可再生能源需求的不断增长,光伏产业也迎来了快速发展的机遇。光伏电站作为太阳能发电的主要形式之一,其建设前期的探勘测绘工作至关重要。在这一过程中,无人机技术的应用正逐渐展现出其独特的优势。那么,为什么光伏探勘…...
day10 | 栈与队列 part-2 (Go) | 20 有效的括号、1047 删除字符串中的所有相邻重复项、150 逆波兰表达式求值
今日任务 20 有效的括号 (题目: . - 力扣(LeetCode))1047 删除字符串中的所有相邻重复项 (题目: . - 力扣(LeetCode))150 逆波兰表达式求值 (题目: . - 力扣(LeetCode)) 20 有效的括号 题目: . - 力扣&…...
深入解析Tomcat的工作流程
tomcat解析 Tomcat是一个广泛使用的开源Servlet容器,用于托管Java Web应用程序。理解Tomcat的工作流程对于开发人员和系统管理员来说是非常重要的。本文将深入探讨Tomcat的工作原理,包括请求处理、线程池管理、类加载、以及与Web服务器之间的通信。 ###…...
【web网页制作】html+css旅游家乡山西主题网页制作(3页面)【附源码】
山西旅游网页目录 涉及知识写在前面一、网页主题二、网页效果Page1、景点介绍Page2、酒店精选|出行攻略Page3、景色欣赏 三、网页架构与技术3.1 脑海构思3.2 整体布局3.3 技术说明书 四、网页源码4.1 主页模块源码4.2 源码获取方式 作者寄语 涉及知识 山西旅游主题网页制作&am…...
系统参数指标:QPS、TPS、PV、UV等
QPS QPS:Queries Per Second 是每秒查询率,是一台服务器每秒能够相应的查询次数,是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准,即每秒的响应请求数,也即是最大吞吐能力。 TPS TPS:Tra…...
一入鸿蒙深似海,从此Spring是路人:鸿蒙开发面试题
详细内容请参考最新的官方鸿蒙文档,不保证时效性 写得不对的地方请多多指点,本文仅代表个人所学知识范围 联系方式QQ 1219723557,可一同交流学习 欢迎补充,希望能做一个汇总版本出来 1. 网络编程基本知识(较为简单&…...
【Python】使用OPC UA创建数据服务器
目录 准备工作服务器设置创建或获取节点设置节点值启动服务器查看服务器客户端总结 在工业自动化和物联网(IoT)领域,OPC UA(开放平台通信统一架构)已经成为一种广泛采用的数据交换标准。它提供了一种安全、可靠且独立于…...
JavaScript(六)-高级篇
文章目录 作用域局部作用域全局作用域作用域链JS垃圾回收机制闭包变量提升 函数进阶函数提升函数参数动态参数多余参数 箭头函数 解构赋值数组解构对象解构 遍历数组forEach方法(重点)构造函数深入对象创建对象的三种方式构造函数实例成员 & 静态成员…...
速盾:游戏cdn什么意思
CDN(Content Delivery Network)是指内容分发网络,它是由一组位于世界各地的服务器组成的网络,用于将内容有效地传输给用户。游戏CDN,顾名思义,就是用于游戏内容分发的网络。 在传统的网络传输模式中&#…...
数据库-Redis(11)
目录 51.什么是Redis事务? 52.Redis事务相关命令? 53.Redis事务的三个阶段?...
生成xcframework
打包 XCFramework 的方法 XCFramework 是苹果推出的一种多平台二进制分发格式,可以包含多个架构和平台的代码。打包 XCFramework 通常用于分发库或框架。 使用 Xcode 命令行工具打包 通过 xcodebuild 命令可以打包 XCFramework。确保项目已经配置好需要支持的平台…...
【Oracle APEX开发小技巧12】
有如下需求: 有一个问题反馈页面,要实现在apex页面展示能直观看到反馈时间超过7天未处理的数据,方便管理员及时处理反馈。 我的方法:直接将逻辑写在SQL中,这样可以直接在页面展示 完整代码: SELECTSF.FE…...
多场景 OkHttpClient 管理器 - Android 网络通信解决方案
下面是一个完整的 Android 实现,展示如何创建和管理多个 OkHttpClient 实例,分别用于长连接、普通 HTTP 请求和文件下载场景。 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas…...
AtCoder 第409场初级竞赛 A~E题解
A Conflict 【题目链接】 原题链接:A - Conflict 【考点】 枚举 【题目大意】 找到是否有两人都想要的物品。 【解析】 遍历两端字符串,只有在同时为 o 时输出 Yes 并结束程序,否则输出 No。 【难度】 GESP三级 【代码参考】 #i…...
python报错No module named ‘tensorflow.keras‘
是由于不同版本的tensorflow下的keras所在的路径不同,结合所安装的tensorflow的目录结构修改from语句即可。 原语句: from tensorflow.keras.layers import Conv1D, MaxPooling1D, LSTM, Dense 修改后: from tensorflow.python.keras.lay…...
使用Spring AI和MCP协议构建图片搜索服务
目录 使用Spring AI和MCP协议构建图片搜索服务 引言 技术栈概览 项目架构设计 架构图 服务端开发 1. 创建Spring Boot项目 2. 实现图片搜索工具 3. 配置传输模式 Stdio模式(本地调用) SSE模式(远程调用) 4. 注册工具提…...
三分算法与DeepSeek辅助证明是单峰函数
前置 单峰函数有唯一的最大值,最大值左侧的数值严格单调递增,最大值右侧的数值严格单调递减。 单谷函数有唯一的最小值,最小值左侧的数值严格单调递减,最小值右侧的数值严格单调递增。 三分的本质 三分和二分一样都是通过不断缩…...
LCTF液晶可调谐滤波器在多光谱相机捕捉无人机目标检测中的作用
中达瑞和自2005年成立以来,一直在光谱成像领域深度钻研和发展,始终致力于研发高性能、高可靠性的光谱成像相机,为科研院校提供更优的产品和服务。在《低空背景下无人机目标的光谱特征研究及目标检测应用》这篇论文中提到中达瑞和 LCTF 作为多…...
redis和redission的区别
Redis 和 Redisson 是两个密切相关但又本质不同的技术,它们扮演着完全不同的角色: Redis: 内存数据库/数据结构存储 本质: 它是一个开源的、高性能的、基于内存的 键值存储数据库。它也可以将数据持久化到磁盘。 核心功能: 提供丰…...
《Docker》架构
文章目录 架构模式单机架构应用数据分离架构应用服务器集群架构读写分离/主从分离架构冷热分离架构垂直分库架构微服务架构容器编排架构什么是容器,docker,镜像,k8s 架构模式 单机架构 单机架构其实就是应用服务器和单机服务器都部署在同一…...
