科学计算模型 Numpy 详解

news2024/10/6 22:25:39

本文主要介绍Numpy,并试图对其进行一个详尽的介绍。
通过阅读本文,你可以:

  1. 了解什么是 Numpy
  2. 掌握如何使 Numpy 操作数组,如创建数组、改变数组的维度、拼接和分隔数组等
  3. 掌握 Numpy 的常用函数,如数组存取函数、加权平均数函数、最大值和最小值函数等

文章目录

  • 前言
  • 1 Numpy 开发环境搭建?
  • 2 数组的创建
    • 2.1 array 创建
    • 2.2 arange 创建
    • 2.3 随机数创建
    • 2.4 ndarray 对象
  • 3 切片和索引
  • 4 改变数组的维度
  • 5 数组的拼接
    • 5.1 水平数组组合
    • 5.2 垂直数组组合
  • 6 数组的分隔
    • 6.1 split 分隔
    • 6.2 水平分隔
    • 6.3 垂直分隔数组
  • 7 算术函数
  • 8 数学函数
  • 9 聚合函数
  • 总结


前言

NumPy(Numerical Python) 是科学计算基础库,提供大量科学计算相关功能,比如数据统计,随机数生成等。其提供最核心类型为多维数组类型(ndarray),支持大量的维度数组与矩阵运算,Numpy 支持向量处理 ndarray 对象,提高程序运算速度。
那么Numpy 到底有什么功能呢?其实Numpy 的功能非常多,主要用于数组计算。Numpy可以让用户在 Python 语言中使用向量和数学矩阵。Numpy 是 Python 语言在科学计算领域取得成功的关键之一,如果想通过 Python 语言学习数据科学、人工智能(包括深度学习、语言处理等分支),就必须学习 Numpy。


1 Numpy 开发环境搭建?

Numpy 是 第 三 方 程 序库,所以在使用 Numpy 之前必须安装 Numpy。如果使用的是 Anaconda Python 开发环境,那么 Numpy 已经集成到Anaconda 环境中了,不需要再安装。如果使用的是官方开发环境,可以使用 pip 命令安装Numpy,语法格式如下:

pip install numpy

【示例1】测试 numpy 模块安装是否成功

import numpy as np 
a=np.arange(10) 
print(a)

执行结果如图 1-1 所示:
在这里插入图片描述

2 数组的创建

2.1 array 创建

numpy 模块的 array 函数可以生成多维数组。例如,如果要生成一个二维数组,
需要向 array 函数传递一个列表类型的参数。每一个列表元素是一维的 ndarray 类型数组,作为二维数组的行。另外,通过 ndarray 类的 shape 属性可以获得数组每一维的元素个数(元组形式),也可以通过 shape[n]形式获得每一维的元素个数,其中 n 是维度,从 0 开始。

语法格式如下:

numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)

参数说明:
在这里插入图片描述
【示例 2】创建一维数组

b=np.array([1,2,3,4,5,6])
print(b)
print('b 数组的维度:',b.shape)

执行结果:
在这里插入图片描述
【示例 3】创建二维数组

a=np.array([[1,2,3],[4,5,6],[7,8,9]])
print(a)
print('a 数组的维度:',a.shape)

执行结果:
在这里插入图片描述
【示例 4】array()函数 ndmin 参数的使用

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

执行结果:
在这里插入图片描述
【示例 5】array()函数 dtype 参数的使用

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

执行结果:
在这里插入图片描述

2.2 arange 创建

使用 arange 函数创建数值范围并返回 ndarray对象,函数语法格式如下:

numpy.arange(start, stop, step, dtype)

参数说明:
在这里插入图片描述
【示例 6】arange()函数创建数组

import numpy as np 
x=np.arange(0,6,dtype=int) 
print(x)

执行结果:
在这里插入图片描述
【示例 7】arange()函数指定起始值、终止值及步长

x=np.arange(10,20,2,dtype=float)
print(x)

执行结果:
在这里插入图片描述
【示例 8】arange()函数创建二维数组

b=np.array([np.arange(1,4),np.arange(4,7),np.arange(7,10)])
print(b)
print('b 数组的维度:',b.shape)

在这里插入图片描述

2.3 随机数创建

numpy 中的 random 模块包含了很多方法可以用来产生随机数,对 random 中的一些常用方法如下:
在这里插入图片描述

【示例 9】numpy.random.random(size=None)的使用

#numpy.random.random(size=None)
#返回[0.0, 1.0)范围的随机数
import numpy as np
print('生成一维(4,)的随机数组:')
x=np.random.random(size=4)
print(x)
print('生成二维(3,4)的随机数组:') 
y=np.random.random(size=(3,4)) 
print(y)

在这里插入图片描述
【示例 10】numpy.random.randint()的使用

import numpy as np 
#numpy.random.randint()的使用
#生成 [0,low)范围的随机整数
x=np.random.randint(5,size=10) 
print(x)
#生成[low,high)范围的随机整数
y=np.random.randint(5,10,size=10) 
print(y)
#生成[low,high)范围的 2*4 的随机整数
z=np.random.randint(5,10,size=(2,4)) 
print(z)

在这里插入图片描述
【示例 11】numpy.random. randn ()的使用

# randn 函数返回一个或一组样本,具有标准正态分布
import numpy as np 
x=np.random.randn() 
print(x) 
y=np.random.randn(2,4) 
print(y) 
z=np.random.randn(2,3,4) 
print(z)

在这里插入图片描述
【示例 12】np.random.normal()的使用

import numpy as np
#正太分布(高斯分布)loc:期望  scale:方差 size  形状
print(np.random.normal(loc=3,scale=4,size=(2,2,3)))

在这里插入图片描述

2.4 ndarray 对象

NumPy最重要的一个特点是其N维数组对象ndarray,它是一系列同类型数据的集合,以0下标为开始进行集合中元素的索引。
ndarray对象是用于存放同类型元素的多维数组。
ndarray中的每个元素在内存中都有相同存储大小的区域。
ndarray内部由以下内容组成:

  • 一个指向数据(内存或内存映射文件中的一块数据)的指针。
  • 数据类型或dtype,描述在数组中的固定大小值的格子。
  • 一个表示数组形状(shape)的元组,表示各维度大小的元组。

NumPy的数组中比较重要ndarray对象属性有:
在这里插入图片描述
在这里插入图片描述
【示例 13】ndarray 属性的使用

import numpy as np 
x1=np.random.randint(10,size=6) 
print(x1) 
x2=np.random.randint(10,size=(3,4)) 
print(x2)
x3=np.random.randn(3,4,5)
print('ndim 属性'.center(20,'*'))
print('ndim:',x1.ndim,x2.ndim,x3.ndim) 
print('shape 属性'.center(20,'*')) 
print('shape:',x1.shape,x2.shape,x3.shape) 
print('dtype 属性'.center(20,'*')) 
print('dtype:',x1.dtype,x2.dtype,x3.dtype) 
print('size 属性'.center(20,'*')) 
print('size:',x1.size,x2.size,x3.size)
print('itemsize 属性'.center(20,'*'))#一个字节是 8 位
print('itemsize:',x1.itemsize,x2.itemsize,x3.itemsize)

在这里插入图片描述
2.5 其他方式创建
ndarray 数组除了可以使用底层 ndarray 构造器来创建外,也可以通过以下几种方式来创建。
zeros 创建指定大小的数组,数组元素以 0 来填充:

numpy.zeros(shape, dtype = float, order = 'C')

【示例 14】zeros()函数创建数组

import numpy as np 
x=np.zeros(5) 
print(x)
#设置类型为整数
y=np.zeros((5,),dtype=int) 
print(y)
z=np.zeros((2,2))
print(z)

在这里插入图片描述
numpy.ones 创建指定形状的数组,数组元素以 1 来填充:

numpy.ones(shape, dtype = None, order = 'C')

【示例 15】ones()函数创建数组

import numpy as np 
x=np.ones(5)
print(x)
y=np.ones((3,4),dtype=int)
print(y)

在这里插入图片描述
numpy.empty() 方法用来创建一个指定形状(shape)、数据类型(dtype)且未初始化的数组,里面的元素的值是之前内存的值:

numpy.empty(shape, dtype = float, order = 'C')

参数说明:
在这里插入图片描述
【示例 16】empty()函数创建数组

import numpy as np 
x=np.empty([3,2],dtype=int) 
print(x)

在这里插入图片描述
linspace 函数用于创建一个一维数组,数组是一个等差数列构成的,格式如下:

np.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)

在这里插入图片描述
【示例 17】linspace()函数创建等差数列

import numpy as np 
x=np.linspace(1,10,10) 
print(x)

在这里插入图片描述
【示例 18】linspace()函数创建等差数列指定 endpoint 参数为 true

import numpy as np 
x=np.linspace(10,20,5,endpoint=True) 
print(x)

在这里插入图片描述
【示例 19】linspace()函数创建等差数列 指定 endpoint 参数为 true,retstep 为 True

import numpy as np 
x=np.linspace(10,20,5,endpoint=True,retstep=True) 
print(x)

在这里插入图片描述
numpy.logspace 函数用于创建一个于等比数列。格式如下:

np.logspace(start, stop, num=50, endpoint=True, base=10.0, dtype=None)

在这里插入图片描述
【示例 20】logspace()函数创建等比数列

import numpy as np
x=np.logspace(0,9,10,base=2)
print(x)

在这里插入图片描述

3 切片和索引

ndarray 对象的内容可以通过索引或切片来访问和修改,与 Python 中 list 的切
片操作一样。ndarray 数组可以基于 0 - n 的下标进行索引,并设置 start, stop 及 step 参数进行,从原数组中切割出一个新数组。
【示例 21】一维数组切片和索引的使用

import numpy as np 
x=np.arange(10) 
print('原数组:',x) 
y = x[2:7:2]
z = x[2:]
print('对数组进行[2:7:2]切片:',y) 
print('对数组进行[2:]切片:',z)

在这里插入图片描述
【示例 22】二维数组索引的使用一

import numpy as np 
x=np.arange(1,13)
a=x.reshape(4,3) 
print('数组元素') 
print(a)
print('获取第二行')
print(a[1])
print('获取第三行第二列')
print(a[2][1])

在这里插入图片描述
【示例 23】二维数组切片的使用

import numpy as np 
x=np.arange(1,13) 
a=x.reshape(4,3) 
print('数组元素') 
print(a)
#使用索引获取
print('所有行的第二列')
print(a[:,1])
print('奇数行的第一列')
print(a[::2,0])

在这里插入图片描述
【示例 24】二维数组索引的使用二

import numpy as np
a = np.arange(1,13).reshape(4,3)
print('数组元素')
print(a)
print('获取第三行第二列的结果:',a[2,1]) 
print('同时获取第三行第二列,第四行第一列') 
print('分别获取:',np.array((a[2,1],a[3,0])))
print('第一个元组是行索引,第二个元组是列索引获取:',a[(2,3),(1,0)])

在这里插入图片描述

【示例 25】负索引的使用

import numpy as np 
x=np.arange(1,13).reshape(4,3) 
print('数组元素')
print(x)
print('获取最后一行')
print(a[-1]) 
print('行进行倒序') 
print(a[::-1]) 
print('行列都倒序') 
print(a[::-1,::-1])

在这里插入图片描述
所有切片取出来的数组,即使你把它赋值给了新的变量,它仍是原来数组的视图。

【示例 26】copy()函数实现数组的复制

import numpy as np 
a=np.arange(1,13).reshape(3,4) 
sub_array=a[:2,:2] 
sub_array[0][0]=1000
print(a) 
print(sub_array) 
print('-'*10 + 'copy' +'-'*10)
sub_array=np.copy(a[:2,:2]) 
sub_array[0][0]=2000 
print(a)
print(sub_array)

在这里插入图片描述

4 改变数组的维度

处理数组的一项重要工作就是改变数组的维度,包含提高数组的维度和降低数组的维度,还包括数组的转置。Numpy 提供的大量 API 可以很轻松地完成这些数组的操作。例如,通过 reshape 方法可以将一维数组变成二维、三维或者多维数组。通过 ravel 方法或flatten 方法可以将多维数组变成一维数组。改变数组的维度还可以直接设置 Numpy 数组的shape 属性(元组类型),通过 resize 方法也可以改变数组的维度。
【示例 27】改变数组的维度

import numpy as np #创建一维的数组
a=np.arange(24) 
print(a)
print('数组 a 的维度:',a.shape)
print('-'*30)

#使用 reshape 将一维数组变成三维数组
b=a.reshape(2,3,4)
print(b)
print('数组 b 的维度:',b.shape)
print('-'*30)

#将 a 变成二维数组
c=a.reshape(3,8) 
print(c)
print('数组 c 的维度:',c.shape)
print('-'*30)

#使用 ravel 函数将三维的 b 变成一维的数组
a1=b.ravel() 
print(a1) 
print('-'*30)

#使用 flatten 函数将二维的 c 变成一维的数组
a2=c.flatten() 
print(a2) 
print('-'*30)

在这里插入图片描述

5 数组的拼接

5.1 水平数组组合

通过 hstack 函数可以将两个或多个数组水平组合起来形成一个数组,那么什
么叫做数组的水平组合。现在有两个 2*3 的数组 A 和 B。
数组 A
0 1 2
3 4 5
数组 B
6 7 8
9 10 11
使用 hstack 函数将两个数组水平组合的代码:hstack(A,B)。返回的结果:
0 1 2 6 7 8
3 4 5 9 10 11
可以看到,数组 A 和数组 B 在水平方向首尾连接了起来,形成了一个新的数组。这就是数组的水平组合。多个数组进行水平组合的效果类似。但数组水平组合必须要满足一个条件,就是所有参与水平组合的数组的行数必须相同,否则进行水平组合会抛出异常。

5.2 垂直数组组合

通过 vstack 函数可以将两个或多个数组垂直组合起来形成一个数组,那么什么叫数组的垂直组合呢?现在以两个 2*3 的数组 A 和 B 为例。
数组 A
0 1 2
3 4 5
数组 B
6 7 8
9 10 11
使用 vstack 函数将两个数组垂直组合代码:vstack(A,B)。运行的结果是:
0 1 2
3 4 5
6 7 8
9 10 11

数组的拼接:
在这里插入图片描述
numpy.concatenate 函数用于沿指定轴连接相同形状的两个或多个数组,格式如下:

numpy.concatenate((a1, a2, ...), axis)

其中参数 a1, a2, …指相同类型的数组;axis 指沿着它连接数组的轴,默认为 0。

【示例 28】concatenate()函数实现数组的拼接

a=np.array([[1,2,3],[4,5,6]]) 
print(a) 
b=np.array([['a','b','c'],['d','e','f']]) 
print(b) 
print(np.concatenate([a,b]))
print('垂直方向拼接 相当于 vstack') 
print(np.concatenate([a,b],axis=0)) 
print('水平方向拼接 相当于 hstack') 
print(np.concatenate([a,b],axis=1))

在这里插入图片描述
numpy.hstack 它通过水平堆叠来生成数组。
numpy.vstack 它通过垂直堆叠来生成数组。
【示例 29】vstack() 与 hstack()实现二维数组的拼接

a=np.array([[1,2,3],[4,5,6]]) 
print(a) 
b=np.array([['a','b','c'],['d','e','f']]) 
print(b)
print('x 轴方向及垂直堆叠') 
print(np.vstack([a,b])) 
print('y 轴方向及水平堆叠') 
print(np.hstack([a,b]))

在这里插入图片描述
注意:如果拼接的行和列数目不同,则会报错。

【示例 30】三维数组的拼接

import numpy as np 
aa=np.arange(1,37).reshape(3,4,3) 
print('数组 aa.shape:',aa.shape) 
bb=np.arange(101,137).reshape(3,4,3) 
print('数组 bb.shape:',bb.shape)
print('concatenate((aa,bb),axis=0)的结果:')
print(np.concatenate((aa,bb),axis=0).shape)   #6 4 3 
print('concatenate((aa,bb),axis=1)的结果:') 
print(np.concatenate((aa,bb),axis=1).shape)   #3,8,3 
print('concatenate((aa,bb),axis=2)的结果:') 
print(np.concatenate((aa,bb),axis=2).shape)   #3,4,6

在这里插入图片描述

6 数组的分隔

6.1 split 分隔

numpy.split 函数沿特定的轴将数组分割为子数组,格式如下:

numpy.split(ary, indices_or_sections, axis)

参数说明:

  • arry:被分割的数组。
  • indices_or_sections:如果是一个整数,就用该数平均切分,如果是一个数组,为沿轴切分的位置。
  • axis:沿着哪个维度进行切分,默认为 0,横向切分。为 1 时,纵向切分。

【示例 31】split()函数分隔一维数组

import numpy as np 
x=np.arange(1,9) 
a=np.split(x,4) 
print(a)
print(a[0])
print(a[1]) 
print(a[2]) 
print(a[3])
#传递数组进行分隔
b=np.split(x,[3,5]) 
print(b)

在这里插入图片描述
【示例 32】split()函数分隔二维数组

#导入 numpy import numpy as np #创建两个数组
a=np.array([[1,2,3],[4,5,6],[11,12,13],[14,15,16]]) 
print('axis=0  垂直方向 平均分隔') 
r=np.split(a,2,axis=0)
print(r[0])
print(r[1])
print('axis=1  水平方向 按位置分隔')
r=np.split(a,[2],axis=1)
print(r)

在这里插入图片描述

6.2 水平分隔

分隔数组是组合数组的逆过程,与组合数组一样,分隔数组也分为水平分隔数组和垂直分隔数组。水平分隔数组与水平组合数组对应。水平组合数组是将两个或多个数组水平进行收尾相接,而水平分隔数组是将已经水平组合到一起的数组再分开。
使用 hsplit 函数可以水平分隔数组,该函数有两个参数,第 1 个参数表示待分隔的数组,第 2 个参数表示要将数组水平分隔成几个小数组,现在先来看一个例子。下面是一个 2*6的二维数组 X。
数组 X
1 2 3 4 5 6
7 8 9 10 11 12

使用如下代码对 X 数组进行分隔

np.hsplit(X,2)

分隔的结果如下:
在这里插入图片描述
很明显,将数组 X 分隔成了列数相同的两个数组。现在使用下面的代码重新对数组 X进行分隔。

np.hsplit(X,3)

分隔的结果如下
在这里插入图片描述
现在将数组 X 分隔成了 3 个列数都为 2 的数组,但要是使用 hsplit(X,4)分隔数组 X 就会抛出异常,这是因为数组 X 是没有办法被分隔成列数相同的 4 个数组的,所以使用 hsplit函数分隔数组的一个规则就是第 2 个参数值必须可以整除待分隔数组的列数。
【示例 33】hsplit()的使用

import numpy as np 
grid=np.arange(16).reshape(4,4) 
a,b=np.hsplit(grid,2)
print(a)
print(b)

在这里插入图片描述

6.3 垂直分隔数组

垂直分隔数组是垂直组合数组的逆过程。垂直组合数组是将两个或多个数组垂直进行首尾相接,而垂直分隔数组是将已经垂直组合到一起的数组再分开。
使用 vsplit 函数可以垂直分隔数组,该函数有两个参数,第 1 个参数表示待分隔的数组,第 2 个参数表示将数组垂直分隔成几个小数组。示例如下,一个 4*3 的二维数组 X。
数组 X
1 2 3
4 5 6
7 8 9
10 11 12
现在使用如下的代码对数组 X 进行分隔:

vsplit(X,2)

分割后的结果如下:

1 2 3
4 5 6

7 8 9
10 11 12
很明显,将数组 X 分隔成了行数相同的两个数组。

import numpy as np 
arr=np.arange(16).reshape(4,4) 
a,b=np.vsplit(arr,[3]) 
print('vsplit(arr,[3])的结果:')
print(a)
print(b)
print('vsplit(arr,[1,3])的结果:')
a,b,c=np.vsplit(arr,[1,3])
print(a) 
print(b) 
print(c)

在这里插入图片描述

【示例 35】transpose()函数的使用

#transpose 进行转置
#二维转置
import numpy as np 
a=np.arange(1,13).reshape(2,6) 
print('原数组 a')
print(a)
print('转置后的数组')
print(a.transpose())
#多维数组转置
aaa=np.arange(1,37).reshape(1,3,3,4) 
#将 1,3,3,4 转换为 3,3,4,1 
print(np.transpose(aaa,[1,2,3,0]).shape)

在这里插入图片描述

7 算术函数

如果参与运算的两个对象 都是 ndarray,并且形状相同,那么会对位彼此之间进行(+ - * /)运算。NumPy 算术函数包含简单的加减乘除: add(),subtract(),multiply() 和divide()。

【示例 36】算术函数的使用

import numpy as np 
a=np.arange(9,dtype=np.float).reshape(3,3) 
b=np.array([10,10,10])
print('两数组进行加法运算 add 或+的结果:')
print(np.add(a,b))
print('两数组进行减法运算 substract 或-的结果:')
print(a-b)
print('两数组进行乘法运算 multiply 或*的结果:')
print(np.multiply(a,b))
print('两数组进行除法运算 divide 或/的结果:')
print(np.divide(a,b))

在这里插入图片描述
【示例 37】函数指定输出结果的用法

# 通用函数指定输出结果的用法
import numpy as np 
x = np.arange(5)
y = np.empty(5) 
np.multiply(x, 10, out=y) 
print(y)

在这里插入图片描述

8 数学函数

NumPy 提供了标准的三角函数:sin()、cos()、tan()。

【示例 38】三角函数的使用

a = np.array([0,30,45,60,90]) 
print ('不同角度的正弦值:') 
#  通过乘 pi/180  转化为弧度
print (np.sin(a*np.pi/180))
print ('数组中角度的余弦值:') 
print (np.cos(a*np.pi/180)) 
print ('数组中角度的正切值:') 
print (np.tan(a*np.pi/180))

在这里插入图片描述
numpy.around() 函数返回指定数字的四舍五入值。

numpy.around(a,decimals)

参数说明:

  • a: 数组。
  • decimals: 舍入的小数位数。 默认值为 0。 如果为负,整数将四舍五入到小数点左侧的位置。
  • numpy.floor() 返回数字的下舍整数。
  • numpy.ceil() 返回数字的上入整数。

【示例 39】around()、floor()、ceil()函数的使用

import numpy as np
a = np.array([1.0,4.55,	123,	0.567,	25.532])
print	('原数组:')
print (a)
print ('round 舍入后:')
print (np.around(a))
print (np.around(a, decimals =	1))
print (np.around(a, decimals =	-1))
print('floor 向下取整:') 
print(np.floor(a)) 
print('ceil 向上取整:') 
print(np.ceil(a))

在这里插入图片描述

9 聚合函数

NumPy 提供了很多统计函数,用于从数组中查找最小元素,最大元素,百分位标准差和方差等。 具体如下表所示:
在这里插入图片描述
numpy.power() 函数将第一个输入数组中的元素作为底数,计算它与第二个输入数组中相应元素的幂。
【示例 40】power()函数的使用

import numpy as np 
a=np.arange(12).reshape(3,4) 
print('原来的数组')
print(a)
print('power(a,2)的结果:')
print(np.power(a,2))

在这里插入图片描述
【示例 41】median ()函数的使用一

a=np.array([4,2,1,5])
#计算偶数的中位数
print('偶数的中位数:',np.median(a))
a=np.array([4,2,1])
print('奇数个的中位数:',np.median(a))
a=np.arange(1,16).reshape(3,5)
print('原来的数组')
print(a)
print('调用 median 函数')
print(np.median(a))
print('调用 median 函数,axis=1  行的中值')
print(np.median(a,axis=1))
print('调用 median 函数,axis=0  列的中值')
print(np.median(a,axis=0))

在这里插入图片描述
numpy.mean() 函数返回数组中元素的算术平均值。 如果提供了轴,则沿其计算。算术平均值是沿轴的元素的总和除以元素的数量。

【示例 42】mean ()函数的使用二

a=np.arange(1,11).reshape(2,5)
print('原来的数组')
print(a)
print('调用 mean 函数')
print(np.mean(a))
print('调用 mean 函数 axis=0  列')
print(np.mean(a,axis=0))
print('调用 mean 函数 axis=1  行')
print(np.mean(a,axis=1))

在这里插入图片描述


总结

以上就是对Numpy知识点的详细介绍。
本文是我学习Python基础的学习笔记,主要供自己以后温故知新,在此梳理一遍也算是二次学习。如对您有所帮助,不甚荣幸。若所言有误,十分欢迎指正。如有侵权,请联系作者删除。

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

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

相关文章

表关联查询

表关联查询 1.表别名 当表的名字很长或者执行一些特殊查询时,为了方便操作或者需要多次使用相同的表时,可以为表指定别名,以替代表原来的名称。 在为表取别名时,要保证不能与数据库中的其他表的名称冲突。 对单表做简单的别名查询…

能否通过手机号查询他人位置及技术实现(省流:不能)

前言 🍀作者简介:被吉师散养、喜欢前端、学过后端、练过CTF、玩过DOS、不喜欢java的不知名学生。 🍁个人主页:红中 🫒每日emo:纪念我死去的爱情 🍂灵感来源:艺术源于生活&#xff0c…

SpringBoot SpringBoot 开发实用篇 5 整合第三方技术 5.2 Spring 缓存使用方式

SpringBoot 【黑马程序员SpringBoot2全套视频教程,springboot零基础到项目实战(spring boot2完整版)】 SpringBoot 开发实用篇 文章目录SpringBootSpringBoot 开发实用篇5 整合第三方技术5.2 Spring 缓存使用方式5.2.1 Spring 缓存使用5.2.…

数字集成电路设计(五、仿真验证与 Testbench 编写)(二)

文章目录4. 信号时间赋值语句4.1 时间延迟的语法说明4.2 时间延迟的描述形式4.3 边沿触发事件4.3.1 事件表达式4.3.2 边沿触发语法格式4.4 电平敏感事件4. 信号时间赋值语句 !!信号赋值语句是硬件描述语言非常重要的一条语句,是对于任意信号…

Zookeeper:Zookeeper的主从选举机制

ZAB 协议,全称 Zookeeper Atomic Broadcast(Zookeeper 原子广播协议),是为分布式协调服务 ZooKeeper 专门设计的一种支持崩溃恢复的一致性协议。基于该协议,ZooKeeper 实现了一种主从模式的系统架构来保持集群中各个副…

业务定制型异地多活架构设计

1个原理 大道至简-异地多活核心原理 异地多活本质上是 CAP 中的AP 大道至深-CAP 粒度 CAP 关注的粒度是数据,而不是系统,需要根据不同业务的数据特点来设计异地多活 延迟 CAP 是忽略网络延迟的 ,但工程落地不可能做到零延迟 分区容忍…

【Linux】linux中你不得不爱的命令集(上)

Linux命令集 我们将要介绍的命令并不是linux中所有的命令,是我们常见的和经常要使用的命令。 我们所用的linux版本是centos7,我们的linux搭建是在腾讯云服务器上搭建的,借助Xshell登录服务器,在root下进行命令行的操作。 目录 L…

[附源码]java毕业设计社区生鲜仓库管理系统

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

异地多活架构的3种模式

业务定制型异地多活 按照业务的优先级进行排序,优先保证核心业务异地多活 基于核心业务的流程和数据,设计定制化的异地多活架构 优点 对基础设施无强要求,例如机房部署、存储系统、时延等,一般部署在远距离的两个城市&#xff…

经济师报考专业选择及难度分析!这三个专业每年报考人数超10万!

经济师 经济师考试报考专业设有10个专业,含工商管理、农业经济、财政税收、金融、保险、运输经济、人力资源管理、旅游经济、建筑与房地产经济、知识产权。那么,哪些专业是经济师报考的热门专业?哪些专业前景较好?哪个又更好考呢…

SAP 物料分类账配置详解Part 2( 基于SAP S/4HANA1909 版本)

1.12 检查物料会计科目的结算 1.13 激活在制品实际成本计算 1.14 定义并分配评估策略 1.15 定义实际成本核算/物料分类帐的访问 1.16 分配成本核算码到物料类型 1.17 将评估范围设置为生产 1.12 检查物料会计科目的结算 1.12.1 概念说明 为物料分类账的结账配置自动…

C++模拟OpenGL库——图片处理及纹理系统(二):图片Alpha值混合操作

目录 Alpha值混合操作 更改一些类接口设置,实现Alpha值设定 Alpha值混合操作 先上图,其实原理和ColorLerp的原理一样,一种线性插值的方法来实现Alpha通道的混合。 Alpha通道就是对RGB三个值的一种表现约束,比如Alpha0.5&#x…

使用keytool生成Tomcat证书

一、HTTPS原理 1、HTTP、HTTPS、SSL、TLS介绍与相互关系 (1)HTTP:平时浏览网页时候使用的一种协议。HTTP协议传输的数据都是未加密的(明文),因此使用HTTP协议传输隐私信息非常不安全。 (2&am…

人工智能学习相关笔记

文章目录留出法(hold-out)Artifact (error)理解交叉熵损失函数(CrossEntropy Loss)信息量信息熵相对熵(KL散度)交叉熵交叉熵在单分类问题中的应用回顾知识蒸馏公式对抗学习随机投影(Random Projection)概述基本实现sklearn中的随机投影独立成分分析(ICA)ICA算法ICA 应用sklearn…

tslib库编译与移植

tslib库编译与移植 1.tslib库简介 tslib 是电阻式触摸屏用于校准的一个软件库,是一个开源的程序,能够为触摸屏驱动获得的采样提供诸如滤波、去抖、校准等功能,通常作为触摸屏驱动的适配层,为上层的应用提供了一个统一的接口。 2…

数据结构——顺序表

目录 一.简介 线性表 顺序表 二.结构体与初始化 1.创建 2.初始化 三.功能实现 1.打印 2.销毁 3.扩容 4.尾插 5.尾删 6.头插 7.头删 8.查找元素 9.下标位置的插入与某一数据前的插入 10.下标位置的删除与某一数据的删除 11.头插、头删、尾插、尾删的常态化 一.简…

模块电路选型(1)----电源模块

系列文章目录 1.电源模块 2.主控模块 3.传感器模块 4.通信模块 5.电机驱动模块 6.存储模块 7.人机交互模块 文章目录前言一、DCDC电源模块1、LM2596 DCDC降压模块设计二、LDO电源模块1、1117芯片前言 送给大学毕业后找不到奋斗方向的你(每周不定时更新&#x…

Spring Data JPA之Spring boot整合JPA进行CRUD

Spring boot整合JPA进行CRUD前言系列博客本博客的实现demo环境配置1.POM依赖2.application.yml文件完整的项目结构代码实现实体类启动类创建数据访问层使用Spring Data JPA 创建带条件的CRUD编写业务层创建UserController类运行测试插入用户数据删除用户数据修改数据查询数据根…

kubernetes(K8S)学习笔记P2:搭建K8s集群2种方式

搭建K8s集群:2种方式2.搭建K8s集群--->kubeadm2.1环境准备2.1.1关闭防火墙2.1.2关闭seliux2.1.3关闭swap分区2.1.4设置主机名称2.1.5将桥接的IPv4流量传递到iptables的链2.1.6时间同步2.2三台虚拟机都安装Docker2.3添加阿里云YUM软件源2.4安装/kubeadm/kubelet2.…

dubbo:从零理解及搭建dubbo微服务框架(一)【附带源码】

0.引言 dubbo作为阿里巴巴开源的微服务框架,提供了高性能的RPC调用。同时因为有阿里的背书,在国内市场得到了广泛应用,dubbo的开源工作在2018年2月阿里将项目捐献给apache基金会后,得到了更加广大的发展。 之前我们讲解了spring…