python科学计算 之 Numpy库的使用详解

news2024/11/26 20:35:59

目录

一:Numpy简介

二:ndarray的创建

三:ndarray的属性

四:切片 索引

五:数组的轴(二维数组)

六:二维数组 切片索引

七:高级索引

八:Numpy广播

九:ufunc函数 算术运算

十:ufunc函数 比较运算

十一:Numpy函数库 随机数

十二:Numpy函数库 求和、平均值、方差

十三:Numpy函数库 大小与排序


一:Numpy简介

NumPy(Numerical Python) 是 Python 语言的一个扩展程序库,

支持大量的维度数组与矩阵运算,

此外也针对数组运算提供大量的数学函数库

NumPy 是一个运行速度非常快的数学库,主要用于数组计算,包含:

一个强大的N维数组对象 ndarray(矩阵)

广播功能函数

整合 C/C++/Fortran 代码的工具

线性代数、傅里叶变换、随机数生成等功能

ndarray对象,主要学习包括有:

ndarray的创建

ndarray的属性

ndarray的索引与切片

多维数组

二:ndarray的创建

Numpy中的核心对象是ndarray

ndarray可以看成数组,类似于R语言的向量或者矩阵

Numpy里面所有函数都是围绕ndarry展开

示例1,如下

python 通过使用list创建 array

import numpy as np

# 通过python list创建 array
a = np.array([1, 2, 3, 4])
b = np.array([5, 6, 7, 8])
c = np.array([[1, 2, 3, 4], [5, 6, 7, 8]])

print("a打印结果为:{}".format(a), type(a))
print("b打印结果为:{}".format(b), type(b))
print("c打印结果为:{}".format(c), type(c))

输出结果为:   a,b是一维;c是多维(二维)

c的0轴为[1 2 3 4]长度为4

c的1轴为[1 2 3 4]  [5 6 7 8]  ,长度为2

a打印结果为:[1 2 3 4] <class 'numpy.ndarray'>
b打印结果为:[5 6 7 8] <class 'numpy.ndarray'>
c打印结果为:[[1 2 3 4]
 [5 6 7 8]] <class 'numpy.ndarray'>

示例1 小结

ndarray对维数没有限制

[]从内到外分别是第0轴,第1轴,第2轴

c第0轴长度为4,第1轴长度为2

 示例2,如下

Numpy提供了专门用于生成ndarray的函数,提高创建ndarray的速度 

2.1 通过arange方法产生数组

import numpy as np

# 通过arange方法产生数组
a = np.arange(0, 1, 0.1)  # start=0 end=1 step=0.1(间隔)
print(a)

输出结果:

[0.  0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9]

2.2 创建等差数列

import numpy as np

# 创建等差数列
b = np.linspace(2.0, 3.0, num=5)
print(b)

输出结果:

[2.   2.25 2.5  2.75 3.  ]

2.3 二维数组

import numpy as np

# 二维数组
c = np.array([[1, 2, 3, 4], [5, 6, 7, 8]])
print(c)

输出结果:

[[1 2 3 4]
 [5 6 7 8]]

2.4 二维全0矩阵

import numpy as np

# 二维全0矩阵
e = np.zeros([2, 3])
print(e)

输出结果:

[[0. 0. 0.]
 [0. 0. 0.]] 

示例3,常见矩阵创建

示例4,自定义函数产生ndarray 

import numpy as np


def func(i):
    return i % 4 + 1


res = np.fromfunction(func, (10,))
print(res, type(res))

输出结果:

[1. 2. 3. 4. 1. 2. 3. 4. 1. 2.] <class 'numpy.ndarray'> 

注:fromfunction第一个参数接收计算函数,第二个参数接收数组的形状

三:ndarray的属性

ndarray的元素具有相同的元素类型dtype

常用的有int(整型),float(浮点型),complex(复数型)

示例1,如下

import numpy as np

a = np.array([1, 2, 3, 4], dtype=float)
print(a)
print(a.dtype)

输出结果: a和a.dtype分别为

[1. 2. 3. 4.]
float64

ndarray的shape属性用来获得它的形状,也可以自己指定

示例2,如下 

import numpy as np

c = np.array([[1, 2, 3, 4], [5, 6, 7, 8], [7, 8, 9, 10]])
print(c.shape)

a = np.array([1, 2, 3, 4])
d = a.reshape((2, 2))  # 维度变换
print(d)

输出结果:c和d分别为

(3, 4)


[[1 2]
 [3 4]] 

示例3

size元素个数、ndim 数组维度、 itemsize属性每个元素的大小,以字节为单位

3.1 size元素个数

import numpy as np

a = np.array([[1, 2, 3, 4], [5, 6, 7, 8]])
print(a.size)

输出结果:8 

3.2  ndim数组维度

import numpy as np

a = np.array([[1, 2, 3, 4], [5, 6, 7, 8]])
print(a.ndim)

输出结果:2 

3.3 itemsize属性每个元素的大小,以字节为单位

import numpy as np

c = np.array([[1, 2, 3, 4], [5, 6, 7, 8], [7, 8, 9, 10]])
print(c.itemsize)

输出结果:4 

四:切片 索引

Numpy数组的切片索引,不会复制内部数组数据,

仅创建原始数据的新视图,以引用方式访问数据

切片索引的要点:

1 切片索引适用于有规律的查找指定位置的元素(元素位置位于等差序列);
2 当切片的数量少于数组维度时,缺失的维度索引被认为是一个完整切片,
省略与使用“:”或“…”等价;        

示例1,一维数组的切片索引

1.1,ndarray对象的内容可以通过索引或切片来访问和修改,和list是一样的

import numpy as np

a = np.arange(10)
print(a)

输出结果:

[0 1 2 3 4 5 6 7 8 9] 

1.2,  为1.1的拓展

import numpy as np

a = np.arange(10)
print(a)

a[::-1]  # 逆序 [9,8,7,6,5,4,3,2,1,0]
print(a[::-1])
a[5]  # 5
print(a[5])
a[3:5]  # [3,4]
print(a[3:5])
a[:5]  # 从索引0开始取5个元素 [0,1,2,3,4]
print(a[:5])
a[:-1]  # 从最后一个索引开始向前取所有的元素[0,1,2,3,4,5,6,7,8]
print(a[:-1])
a[1:-1:2]  # 从索引1开始到最后一个结束,每2个取一个[1,3,5,7]
print(a[::-1])
a[5:1:-2]  # [5,3]
print(a[5:1:-2])
a[...]  # 索引全部元素,与a[:]等价
print(a[...])

输出结果:

[0 1 2 3 4 5 6 7 8 9]
[9 8 7 6 5 4 3 2 1 0]
5
[3 4]
[0 1 2 3 4]
[0 1 2 3 4 5 6 7 8]
[9 8 7 6 5 4 3 2 1 0]
[5 3]
[0 1 2 3 4 5 6 7 8 9] 

1.3,可以通过切片的对ndarray中的元素进行更改

import numpy as np

a = np.arange(10)
a[2:4] = 100, 101
print(a)

输出结果:

[  0   1 100 101   4   5   6   7   8   9] 

1.4, ndarray通过切片产生一个新的数组b,b和a共享同一块数据存储空间 

import numpy as np

# 输出1
a = np.array([0, 1, 100, 101, 4, 5, 6, 7, 8, 9])
b = a[3:7]
print(b)
# 输出2
b[2] = -10
print(b)
# 输出3
print(a)

输出结果:

 [101   4   5   6]
[101   4 -10   6]
[  0   1 100 101   4 -10   6   7   8   9]

1.5,如果想改变这种情况,我们可以用整数数组索引对数组元素切片

import numpy as np

# 输出1
a = np.array([0, 1, 100, 101, 4, 5, 6, 7, 8, 9])
b = a[[3, 3, -3, 8]]
print(b)
# 输出2
b[2] = 100
print(b)
# 输出3
print(a)
# [0 1 100 101 4 -10 6 7 8 9]

输出结果:

[101 101   7   8]
[101 101 100   8]
[  0   1 100 101   4   5   6   7   8   9] 

五:数组的轴(二维数组)

二维数组有2个轴,轴索引分别是0和1 

示例1,如下 

import numpy as np

a = np.array([[1, 2, 3], [4, 5, 6]])
print(a[1][2], a[1, 2])
b = a.T  # 数组转置
print(b)

输出结果:

6 6
[[1 4]
 [2 5]
 [3 6]] 

六:二维数组 切片索引

多维数组同样适用上述索引提取方法

示例1,如下

import numpy as np

a = np.array([[1, 2, 3], [3, 4, 5], [4, 5, 6]])
print(a)

print(a[1:])

输出结果: a 与 a[1:]分别为

[[1 2 3]
 [3 4 5]
 [4 5 6]]
[[3 4 5]
 [4 5 6]] 

切片还可以包括省略号 …,来使选择元组的长度与数组的维度相同

如果在行位置使用省略号,它将返回包含行中元素的 ndarray

示例2,如下 

import numpy as np

a = np.array([[1, 2, 3], [3, 4, 5], [4, 5, 6]])
print(a[..., 1])  # 第2列元素
print(a[1, ...])  # 第2行元素
print(a[..., 1:])  # 第2列及剩下的所有元素

输出结果, 3个结果分别为:

[2 4 5]
[3 4 5]
[[2 3]
 [4 5]
 [5 6]] 

七:高级索引

NumPy 比一般的 Python 序列提供更多的索引方式

除了用整数和切片的索引外,数组可以由整数数组索引、布尔索引及花式索引创立原数组的副本

7.1 整数数组索引

示例1,如下

import numpy as np

x = np.array([[1, 2], [3, 4], [5, 6]])
y = x[[0, 1, 2], [0, 1, 0]]
print(y)  # 获取数组中(0,0),(1,1)和(2,0)位置处的元素

输出结果:

[1 4 5] 

示例2,如下

import numpy as np

a = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
b = a[1:3, 1:3]
c = a[1:3, [1, 2]]
d = a[..., 1:]
print(b)  # [[5 6], [8,9]]
print(c)  # [[5 6], [8,9]]
print(d)  # [[1 2], [5 6], [8,9]]

输出结果:

[[5 6]
 [8 9]]
[[5 6]
 [8 9]]
[[2 3]
 [5 6]
 [8 9]] 

7.2 布尔索引 

布尔索引通过布尔运算(如:比较运算符)来获取符合指定条件的元素的数组 

示例1,如下

import numpy as np

x = np.array([[0, 1, 2], [3, 4, 5], [6, 7, 8], [9, 10, 11]])
# 现在我们会打印出大于 5 的元素  
b = x[x > 5]
print('大于5的元素是\n{}'.format(b))

输出结果:

大于5的元素是
[ 6  7  8  9 10 11] 

示例2,如下

import numpy as np

# 使用了 ~(取补运算符)来过滤 NaN。
a = np.array([np.nan, 1, 2, np.nan, 3, 4, 5])
print(a[~np.isnan(a)])

输出结果:

[1. 2. 3. 4. 5.] 

7.3 花式索引

花式索引指的是利用整数数组进行索引

花式索引根据索引数组的值作为目标数组的某个轴的下标来取值。对于使用一维整型数组作为索引,如果目标是一维数组,那么索引的结果就是对应位置的元素;如果目标是二维数组,那么就是对应下标的行

花式索引跟切片不一样,它总是将数据复制到新数组中

示例1,如下

import numpy as np

x = np.arange(32).reshape((8, 4))  # 传入倒序索引
print(x[[4, 2, 1, 7]])
print(x[[-4, -2, -1, -7]])

输出结果:

[[16 17 18 19]
 [ 8  9 10 11]
 [ 4  5  6  7]
 [28 29 30 31]]
[[16 17 18 19]
 [24 25 26 27]
 [28 29 30 31]
 [ 4  5  6  7]] 

示例2,如下

import numpy as np

x = np.arange(32).reshape((8, 4))
print(x[np.ix_([1, 5, 7, 2], [0, 3, 1, 2])])  # 输出4*4矩阵
# 其元素分别是
# x[1,0] x[1,3] x[1,1] x[1,2]
# x[5,0] x[5,3] x[5,1] x[5,2]
# x[7,0] x[7,3] x[7,1] x[7,2]
# x[2,0] x[2,3] x[2,1] x[2,2]
# 相当于:
# y=np.array([[x[1,0], x[1,3], x[1,1], x[1,2]],\
#             [x[5,0], x[5,3], x[5,1],x[5,2]],\
#             [x[7,0] ,x[7,3], x[7,1], x[7,2]],\
#             [x[2,0], x[2,3], x[2,1], x[2,2]]])

输出结果:

[[ 4  7  5  6]
 [20 23 21 22]
 [28 31 29 30]
 [ 8 11  9 10]] 

八:Numpy广播

广播(Broadcast)是 numpy 对不同形状(shape)的数组进行数值计算的方式, 对数组的算术运算通常在相应的元素上进行

如果两个数组 a 和 b 形状相同,即满足 a.shape == b.shape,那么 a*b 的结果就是 a 与 b 数组对应位相乘;这要求维数相同,且各维度的长度相同

示例,如下

import numpy as np

# 当运算中的 2 个数组的形状不同时,numpy 将自动触发广播机制。
a = np.array([1, 2, 3])
b = np.array([[0, 0, 0], [10, 10, 10], [20, 20, 20], [30, 30, 30]])
c = a + b
print(c)

输出结果:

[[ 1  2  3]
 [11 12 13]
 [21 22 23]
 [31 32 33]] 

九:ufunc函数 算术运算

ufunc是universal function的简称,它是一种能对数组每个元素进行运算的函数

Numpy的许多ufunc函数都是用C实现的,因此它们的运算速度非常快

值得注意的是,对于等长度的ndarray,np.sin()比math.sin()要快,但是对于单个数值,math.sin()比较快 

Numpy提供了的许多ufunc函数,它们和相应的的运算符运算结果相同

示例如下

import numpy as np

a = np.arange(0, 4)  # [0 1 2 3]
b = np.arange(1, 5)  # [1 2 3 4]
res1 = np.add(a, b)
print(res1)
res2 = a + b
print(res2)

# >>> np.substract(a,b)		# 减法
# >>> np.multiply(a,b)		# 乘法
# >>> np.divide(a,b)		# 如果两个数字都为正数,则为整数除法
# >>> np.power(a,b)		# 乘方

输出结果:

[1 3 5 7]
[1 3 5 7] 

十:ufunc函数 比较运算

使用==,>对两个数组进行比较,会返回一个布尔数组,

每一个元素都是对应元素的比较结果

import numpy as np

a = np.array([1, 2, 3]) < np.array([3, 2, 1])
print(a)

输出结果:

[ True False False]

布尔运算在Numpy中也有对应的ufunc函数

如下示例

十一:Numpy函数库 随机数

Numpy提供了大量对于数组运算的函数。可以简化逻辑,提高运算速度

Numpy产生随机数的模块在random里面,其中有大量的分布

示例如下

import numpy as np

from numpy import random as nr

np.set_printoptions(precision=2)  # 显示小数点后两位

r1 = nr.rand(4, 3)
r2 = nr.poisson(2.0, (4, 3))
print(r1)
print(r2)

输出结果:

[[0.7  0.65 0.72]
 [0.8  0.99 0.35]
 [0.55 0.26 0.25]
 [0.33 0.24 0.88]]
[[1 2 3]
 [2 2 5]
 [6 4 1]
 [5 2 1]]

十二:Numpy函数库 求和、平均值、方差

示例1,如下

import numpy as np

np.random.seed(42)
a = np.random.randint(0, 10, size=(4, 5))

res = np.sum(a)
print(res)

输出结果:96

示例2,如下

import numpy as np

np.random.seed(42)
a = np.random.randint(0, 10, size=(4, 5))

res1 = a
print(res1)
res2 = np.sum(a, axis=1)  # 行
print(res2)
res3 = np.sum(a, axis=0)  # 列
print(res3)

 输出结果: 3个结果值,分别为

[[6 3 7 4 6]
 [9 2 6 7 4]
 [3 7 7 2 5]
 [4 1 7 5 1]]
[26 28 24 18]
[22 13 27 18 16]

示例3,keepdims可以保持原来数组的维数 

import numpy as np

np.random.seed(42)
a = np.random.randint(0, 10, size=(4, 5))

res1 = np.sum(a, 1, keepdims=True)
print(res1)
res2 = np.sum(a, 0, keepdims=True)
print(res2)

输出结果:2个结果,分别为

[[26]
 [28]
 [24]
 [18]]
[[22 13 27 18 16]] 

十三:Numpy函数库 大小与排序

Numpy在排序等方面常用的函数如下: 

min,max都有axis,out,keepdims等参数,我们来看其他函数,

示例1如下

import numpy as np

a = np.array([1, 3, 5, 7])
b = np.array([2, 4, 6])
res = np.maxinum(a[None, :], b[:, None])  # maxinum返回两组矩阵广播计算后的结果
print(res)

输出结果:

[[2 3 5 7],

 [4 4 5 7],

 [6 6 6 7]]

sort()对数组进行排序会改变数组排序的内容,返回一个新的数组。axis的默认值是-1,即按最终轴进行排序。axis=0对每列上的值进行排序;

示例2 ,如下

import numpy as np

a = np.array([
    [4, 7, 4, 5],
    [2, 7, 3, 5],
    [6, 6, 6, 7]
])
b = np.sort(a)
print(b)

输出结果:

[[4 4 5 7]
 [2 3 5 7]
 [6 6 6 7]] 

import numpy as np

a = np.array([
    [4, 7, 4, 5],
    [2, 7, 3, 5],
    [6, 6, 6, 7]
])
b = np.sort(a, axis=0)
print(b)

 输出结果:

[[2 6 3 5]
 [4 7 4 5]
 [6 7 6 7]]

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

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

相关文章

使用pypy来提升你的python项目性能

一、PyPy介绍 PyPy是用Python实现的Python解释器的动态编译器&#xff0c;是Armin Rigo开发的产品&#xff0c;能够提升我们python项目的运行速度。PyPy 是利用即时编译的 Python 的替代实现。背后的原理是 PyPy 开始时就像一个解释器&#xff0c;直接从源文件运行我们的 Pyth…

Revit二次开发小技巧(十五)构件的最小矩形外轮廓

前言&#xff1a;我们会经常遇到需要计算一个构件的最小外轮廓&#xff0c;一般直接取BoundingBox只有最大和最小值坐标&#xff0c;也是基于x-y坐标系下的。往往不是最小的矩形&#xff0c;所以分享下面的算法来计算最小的外轮廓&#xff0c;条件为法向量是指向Z轴的&#xff…

mqtt服务器搭建与qt下的mqtt客户端实现

一、mqtt介绍 MQTT&#xff08;Message Queuing Telemetry Transport&#xff0c;消息队列遥测传输协议&#xff09;&#xff0c;是一个基于客户端-服务器的消息发布/订阅传输协议。MQTT协议是轻量、简单、开放和易于实现的&#xff0c;这些特点使它适用范围非常广泛。在很多情…

前端基础(九)_CSS的三大特征

CSS的三大特征 1、层叠性 1.样式冲突&#xff0c;遵循就近原则 2.样式不冲突&#xff0c;不会层叠&#xff0c;会叠加 1.1.样式冲突&#xff0c;遵循就近原则例子&#xff1a; <!DOCTYPE html> <html lang"en"><head><meta charset"UT…

[附源码]Nodejs计算机毕业设计基于的服装商城系统Express(程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程。欢迎交流 项目运行 环境配置&#xff1a; Node.js Vscode Mysql5.7 HBuilderXNavicat11VueExpress。 项目技术&#xff1a; Express框架 Node.js Vue 等等组成&#xff0c;B/S模式 Vscode管理前后端分…

Java优雅的记录日志:log4j实战篇

写在前面 项目开发中&#xff0c;记录错误日志有以下好处&#xff1a; 方便调试 便于发现系统运行过程中的错误 存储业务数据&#xff0c;便于后期分析 在java中&#xff0c;记录日志有很多种方式&#xff1a; 自己实现&#xff1a;自己写类&#xff0c;将日志数据&#xf…

HTTP Range:范围请求

文章目录HTTP 范围请求HTTP 范围请求 Range 头是在 HTTP/1.1 协议中新增的一个请求头。包含 Range 头的请求通常称为范围请求&#xff0c;因为 Range 头允许服务器只发送部分响应到客户端&#xff0c;它是下载工具&#xff08;例如迅雷&#xff09;实现多线程下载的核心所在&a…

Python -- 列表

目录 1.列表的基本使用 1.1 列表的格式 1.2 使用下标获取列表元素 2.列表的增删改查 2.1 添加元素 2.2 修改元素 2.3 查找元素 2.4 删除元素 2.5 排序&#xff08;sort、reverse&#xff09; 3.列表遍历 3.1 使用while循环 3.2 使用for循环 4.列表的嵌套 1.列表的基本…

面向切面编程 AOP

AOPAOP的概念AOP &#xff08;底层原理&#xff09;AOP 底层使用动态代理AOP &#xff08; JDK 动态代理&#xff09;首先我们来看一下 Spring 的百度百科   Spring 框架是一个开放源代码的 J2EE 应用程序框架&#xff0c;由 Rod Johnson 发起&#xff0c;是针对 Bean 的生命…

cpp项目中遇到的一些错误

1.解决由于找不到xxx.dll&#xff0c;无法继续执行代码的问题 解决由于找不到xxx.dll&#xff0c;无法继续执行代码的问题_happylife_mini的博客-CSDN博客_由于找不到emp.dll无法继续执行代码在用vs写项目&#xff0c;或者你下载github上的C代码的时候&#xff0c;是不是经常遇…

【Redis技术探索】「底层架构原理」探索分析服务系统的网络架构和线程模型

Redis网络基础架构 网络编程离不开Socket&#xff0c;网络I/O模型最常用的无非是同步阻塞、同步非阻塞、异步阻塞、异步非阻塞&#xff0c;高性能网络服务器最常见的线程模型也就是基于EventLoop模式的单线程模型。 Redis基础组建结构 Redis网络层基础组件主要包括四个部分&a…

acm是什么?你准备好去打了吗?(未完结)

1.引言2.acm究竟是什么&#xff1f;3.acm的时间安排4.acm该如何准备1.引言 作为一个零基础的小白&#xff0c;acm这条路走的并不顺畅&#xff0c;接触的信息很少&#xff0c;以至于在这条道路上走了不少弯路&#xff0c;浪费了大量的时间&#xff0c;现在也快要退役的阶段&…

Linux基础-软件包管理器RPM与yum

该文章主要为完成实训任务&#xff0c;详细实现过程及结果见【参考文章】 参考文章&#xff1a;https://howard2005.blog.csdn.net/article/details/127131286?spm1001.2014.3001.5502 文章目录一、使用RPM软件包管理器1. RPM安装软件包2. RPM更新与升级软件包3. RPM查询软件包…

Qt-Web混合开发-Qt读写Json数据(5)

Qt-Web混合开发-Qt使用内置json库读写json示例&#x1f34f; 文章目录Qt-Web混合开发-Qt使用内置json库读写json示例&#x1f34f;1、概述&#x1f353;2、实现效果&#x1f345;3、实现功能&#x1f95d;4、关键代码&#x1f33d;5、源代码&#x1f346;更多精彩内容&#x1f…

面试怎么回答MySQL索引问题,看这里

前言 小A在宿舍里跟哥们开五黑打排位中&#xff0c;突然收到女神小美的消息&#xff1a;“小A&#xff0c;我今天面试碰到索引问题了&#xff0c;我没回答好”。小A顾不上游戏抓紧回复到&#xff1a;“到你宿舍某某咖啡店吧&#xff0c;我帮你一起看下”。 小A抓紧时间换了衣…

物联公司网页设计制作 简单静态HTML网页作品 静态企业网页作业成品 学生网站模板

&#x1f389;精彩专栏推荐 &#x1f4ad;文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;毕设项目精品实战案例 (10…

Linux系统部署

Linux系统部署 下载vmware centos7 xshell6 xftp6新建虚拟机&#xff0c;注意设置网络连接&#xff0c;设置登录名&#xff1a;root,密码&#xff1a;root,等待登录&#xff0c;输入用户名和密码&#xff08;注意密码输入不显示&#xff09;登录成功&#xff0c;执行命令Ifc…

【网管日记】MySQL主从复制

MySQL主从复制 基本介绍 MySQL 主从复制是一个异步的复制过程&#xff0c;底层是基于 Mysql 数据库自带的 二进制日志 功能。 一台或多台 MySQL 数据库&#xff08;slave&#xff0c;即 从库 &#xff09;从另一台 MySQL 数据库&#xff08; master&#xff0c;即 主库 &…

餐饮后台管理系统

一、项目介绍&#xff1a; 用于每天的菜品数据分析&#xff0c;客户的管理&#xff0c;员工的管理&#xff0c;查看订单信息&#xff0c;菜品的添加或者下架管理 二、项目使用技术栈&#xff1a; vue2全家桶、element-ui、axios、js、es6、echarts 三、主页效果图&#xff…

pytorch深度学习实战一书,tensorboard可视化踩坑

书评&踩坑[TOC](书评&踩坑) 提示&#xff1a;纯个人观点&#xff0c;仅供参考前言一、源码学习&#xff0c;又是版本问题&#xff08;省略内心独白...&#xff09;二、步骤1.安装tensorflow2.思考&#xff0c;看代码&#xff0c;看书求证总结提示&#xff1a;纯个人观点…