Python 第三方模块之 NumPy - 科学计算

NumPy 简介

NumPy 发展历史

  1. 1995年 Jim HugUNin开发了Numeric。
  2. 随后,Numarray包诞生。
  3. Travis Oliphants整合Numeric和Numarray,开发Numpy,于2006年发布第一个版本。
  4. Numpy(Numeric Python)提供了许多高级的数值编程工具,如:矩阵数据类型、矢量处理,以及精密的运算库。专为进行严格的数字处理而产生。多为很多大型金融公司使用,以及核心的科学计算组织如:Lawrence Livermore,NASA用其处理一些本来使用C++,Fortran或Matlab等所做的任务。
  5. 使用Anaconda发行版的Python,已经帮我们事先安装好了Numpy模块,因此无需另外安装。
  6. 依照标准的Numpy约定,习惯使用 import numpy as np方式导入该模块。

NumPy模块

numPyNumerical Python,即数值Python包,是Python进行科学计算的一个基础包,所以是一个掌握其他Scipy库中模块的基础模块,一定需要先掌握该包的主要使用方式。

  • 官网:http://www.numpy.org/
  • 官方文档:https://docs.scipy.org/doc/numpy/user/index.html

NumPy 、Scipy、Pandasmatplotlib简介

  1. NumPy ——基础,以矩阵为基础的数学计算模块,纯数学存储和处理大型矩阵。  这个是很基础的扩展,其余的扩展都是以此为基础。

  2. Scipy——数值计算库,在NumPy 库的基础上增加了众多的数学、科学以及工程计算中常用的库函数。  方便、易于使用、专为科学和工程设计的Python工具包.它包括统计,优化,整合,线性代数模块,傅里叶变换,信号和图像处理,常微分方程求解器等等。
  3. Pandas——数据分析,基于NumPy  的一种工具,为了解决数据分析任务而创建的.Pandas 纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具。
  4. matplotlib——绘图,对于图像美化方面比较完善,可以自定义线条的颜色和式样,可以在一张绘图纸上绘制多张小图,也可在一张图上绘制多条线,可以很方便的对数据进行可视化分析。

NumPy核心数据结构:ndarray

NumPy的数组类被称作ndarray。通常被称作数组。注意numpy.array和标准Python库类array.array并不相同,后者只处理一维数组和提供少量功能。

一种由相同类型的元素组成的多维数组,元素数量是实现给定好的

元素的数据类型由dtype(data-type)对象来指定,每个ndarray只有一种dtype类型

ndarray的大小固定,创建好数组后数组大小是不会再发生改变的

ndarray创建

函数创建

array:接收一个普通的python序列,并将其转换为ndarray

print(np.array([1,2,3]))    # 用列表创建一维数组
print(np.array((1,2,3)))    # 用元组创建一维数组
print(np.array([[1,2,3],[3,4,5]])) 	# 创建二维数组
print(np.array([[[1,2,3],[3,4,5]], [[4,5,6],[7,8,9]]]))  # 创建三维数组# [1 2 3]# [1 2 3]  # [[1 2 3]
# [3 4 5]] # [[[1 2 3]
# [3 4 5]]
# [[4 5 6]
# [7 8 9]]]

zeros函数:创建指定长度或者形状的全零数组

print(np.zeros((3,4)))# [[0. 0. 0. 0.]
# [0. 0. 0. 0.]
# [0. 0. 0. 0.]]

ones函数:创建指定长度或者形状的全1数组。

print(np.ones((3,4)))# [[1. 1. 1. 1.]
# [1. 1. 1. 1.]
# [1. 1. 1. 1.]]

empty函数:创建一个没有任何具体值的数组(准备地说是创建一些未初始化的ndarray多维数组)

print(np.empty((3,4)))# [[6.23042070e-307 3.56043053e-307 1.37961641e-306 6.23039354e-307]
#  [6.23053954e-307 9.34609790e-307 8.45593934e-307 9.34600963e-307]
#  [1.86921143e-306 6.23061763e-307 9.34608432e-307 4.24399158e-314]]

其他方式:

arange函数: 类似python的range函数,通过指定开始值、终值和步长来创建一个一维数组,注意:最终创建的数组不包含终值

print(np.arange(9))      # 一个参数时代表是n值
print(np.arange(0,9,3))  # 起始值,终值,步长

linspace函数:通过指定开始值、终值和元素个数来创建一个一维数组,数组的数据元素符合等差数列,可以通过endpoint关键字指定是否包含终值,默认包含终值

print(np.linspace(0,8,5)) # 形成一个0到8之间的等差数列,共5个元素
# [0. 2. 4. 6. 8.]

logspace函数:和linspace函数类似,不过创建的是等比数列数组

print(np.logspace(0, 2, 5))  # 范围1-10**2,5个元素
print(np.logspace(0, 5, 6, base=2))  # 范围 1-2**5,6个元素,base是底# [  1.           3.16227766  10.          31.6227766  100.        ]
# [ 1.  2.  4.  8. 16. 32.]

np.random.randint((m,n,size=(a,b))):创建随机整数数组,选值的范围是[m,n); a是数组的行;b是数组的列数

print(np.random.randint(1,9, size=(3,4)))# [[1 2 3 5]
#  [1 6 2 7]
#  [8 6 4 6]]

np.random.random((m,n,p)):创建随机数组,范围0-1之间,m为维数,默认为1; n为行数,默认为1; p为列数,默认为1

print(np.random.random())
print(np.random.random((3,3)))
print(np.random.random((3,4,5)))0.488869811358302[[0.04233258 0.3131225  0.68944938][0.87059721 0.67384851 0.15279566][0.55984723 0.93180875 0.94961102]][[[0.59919237 0.1994035  0.51349683 0.74415431 0.08967972][0.51202792 0.90590204 0.72763875 0.28438195 0.74681998][0.83841345 0.58347337 0.11484284 0.55444849 0.7978348 ][0.28018216 0.01040884 0.57392768 0.2434304  0.59227622]][[0.5430919  0.42146133 0.14726534 0.03191174 0.26208523][0.09970413 0.42386556 0.91181302 0.98131496 0.80365805][0.45376739 0.83388326 0.44127547 0.09819375 0.7977529 ][0.94739682 0.70020476 0.21155345 0.42489893 0.99906962]][[0.91776003 0.10385849 0.52768841 0.79937635 0.69065729][0.00796977 0.77475184 0.37661829 0.86323215 0.48432327][0.26268683 0.51724413 0.24022605 0.08388501 0.30099232][0.09245234 0.07751062 0.77418801 0.43640313 0.99036787]]]

 np.random.randn(m,n):创建一个标准正态分布的数组,m表示行数;n表示列数。

print(np.random.randn(3,2))
# [[ 0.10110133 -0.23799349]
#  [ 0.44611654  2.52476781]
#  [-0.52620207 -1.42422191]]

ndarray对象属性

  • ndim 数组轴(维度)的个数,轴的个数被称作秩
  • shape 数组的维度, 例如一个2排3列的矩阵,它的shape属性将是(2,3),这个元组的长度显然是秩,即维度或者ndim属性
  • size 数组元素的总个数,等于shape属性中元组元素的乘积。
  • dtype 一个用来描述数组中元素类型的对象,可以通过创造或指定dtype使用标准Python类型。不过NumPy提供它自己的数据类型。
  • itemsize 数组中每个元素的字节大小。例如,一个元素类型为float64的数组itemsiz属性值为8(=64/8),又如,一个元素类型为complex32的数组item属性为4(=32/8).
arr = np.random.randint(1, 9, size=(3,3))
print(arr.ndim)       # 2
print(arr.shape)      # (3, 3)
print(arr.dtype)      # int32
print(arr.size)       # 9
print(arr.itemsize)   # 4

NumPy基本数据类型

数据类型

类型简 写

说明

int_

 

默认整形

intc

 

等价于long的整形

int8

i1

字节整形,1个字节,范围:[-128,127]

int16

i2

整形,2个字节,范围:[-32768,32767]

int32

i3

整形,4个字节,范围:[-2^31, 2^31-1]

int64

i4

整形,8个字节,范围:[-2^63, 2^63-1]

uint8

u1

无符号整形, 1个字节, 范围:[0,255]

uint16

u2

无符号整形, 2个字节, 范围:[0,65535]

uint32

u3

无符号整形, 1个字节, 范围:[0, 2^32-1]

uint64

u4

无符号整形, 1个字节, 范围:[0,2^64-1]

bool_

 

以一个字节形成存储的布尔值(True或者False)

float_

 

float64简写形式

float16

f2

半精度浮点型(2字节)1符号位+5位指数+10位的小数部分

float32

f4或者f

单精度浮点型(4字节)1符号位+8位指数+23位的小数部分

float64

f8或者d

双精度浮点型(8字节)1符号位+11位指数+52位的小数部分

complex_

c16

complex128的简写形式

complex64

c8

复数,由两个32位的浮点数来表示

complex128

c16

复数,由两个64位的浮点数来表示

object

O

Python对象类型

String_

S

固定长度的字符串类型(每个字符1个字节),比如:要创建一个长度为8的字符串,应该使用S8

Unicode_

U

固定长度的unicode类型的字符串(每个字符占用字节数由平台决定),长度定义类似String_类型

ndarray修改类型

创建numpy数组的时候可以通过属性dtype显示指定数据类型,如果不指定的情况下,numpy会自动推断出适合的数据类型,所以一般不需要显示给定数据类型。

 如果需要更改一个已经存在的数组的数据类型,可以通过astype方法进行修改从而得到一个新数组

arr = np.random.randint(1, 9, size=(3,3))
print(arr.dtype)          # int32
arr2 = arr.astype(float)
print(arr2.dtype)         # float64

数值型dtype的命名方式为:一个类型名称(eg:int、float等),后接一个表示各个元素位长的数字。比如Python的float数据类型(双精度浮点值),需要占用8个字节(64位),因此在NumPy中记为float64。每个数据类型都有一个类型代码,即简写方式

arr3 = np.random.randint(1, 9, size=(3,3), dtype='i8')
print(arr3.dtype) # int64

ndarray修改形状

对于一个已经存在的ndarray数组对象而言,可以通过修改形状相关的参数/方法从而改变数组的形状。

直接修改数组ndarray的shape值, 要求修改后乘积不变。

直接使用reshape函数创建一个改变尺寸的新数组,原数组的shape保持不变,但是新数组和原数组共享一个内存空间,也就是修改任何一个数组中的值都会对另外一个产生影响,另外要求新数组的元素个数和原数组一致。

当指定某一个轴为-1的时候,表示将根据数组元素的数量自动计算该轴的长度值。

arr = np.array([1,2,3,4,5,6,7,8])
print(arr.reshape(2,4))
arr = np.array([1,2,3,4,5,6,7,8])
print(arr.reshape(2,-1))# [[1 2 3 4]
#  [5 6 7 8]]
# [[1 2 3 4]
#  [5 6 7 8]]

NumPy基本操作

数组与标量、数组之间的运算

数组不用循环即可对每个元素执行批量的算术运算操作,这个过程叫做矢量化,即用数组表达式代替循环的做法。

矢量化数组运算性能比纯Python方式快上一两个数据级。

大小相等的两个数组之间的任何算术运算都会将其运算应用到元素级上的操作。

元素级操作:在NumPy中,大小相等的数组之间的运算,为元素级运算,即只用于位置相同的元素之间,所得的运算结果组成一个新的数组,运算结果的位置跟操作数位置相同。

# 数组和标量运算
arr1 = np.array((1,2,3,4,5))
print(arr1+2)   # [3 4 5 6 7]
print(arr1-3)   # [-2 -1  0  1  2]
print(arr1*2)   # [ 2  4  6  8 10]
print(arr1/2)   # [0.5 1.  1.5 2.  2.5]
print(arr1**2)  # [ 1  4  9 16 25]
print(2**arr1)  # [ 2  4  8 16 32]
# 数组和数组运算
arr2 = np.array([[1, 2, 3], [4, 5, 6]])
arr3 = np.array([[10, 20, 30], [40, 50, 60]])
print(arr2+arr3)  # 相乘的两者结构相同
print(arr2*arr3)
print(arr2**arr3)# [[11 22 33]
#  [44 55 66]]
# [[ 10  40  90]
#  [160 250 360]]
# [[          1     1048576 -1010140999]
#  [          0  1296002393           0]]

数组的矩阵积(matrix product)

矩阵积(matrix product):两个二维矩阵(行和列的矩阵)满足第一个矩阵的列数与第二个矩阵的行数相同,那么可以进行矩阵的乘法,即矩阵积,矩阵积不是元素级的运算。也称为点积、数量积。

arr1 = np.array(((1, 2, 3),(4, 5, 6),(7, 8, 9)))
arr2 = np.array(((1, 2),(3, 4),(5, 6)))
print(np.dot(arr1,arr2))
print(arr1.dot(arr2))# [[ 22  28]
#  [ 49  64]
#  [ 76 100]]# [[ 22  28]
#  [ 49  64]
#  [ 76 100]]

数组的索引与切片

ndarray-多维数组的索引

根据数组的形状,进行索引

arr2 = np.arange(27).reshape(3, 3, 3)
print(arr2)
print(arr2[0])  # 一维索引
print(arr2[0][1])  # 一维,二维
print(arr2[0][1][2])  # 一维,二维,三维
print(arr2[0, 1, 2])  # 推荐写法# [[[ 0  1  2]
#   [ 3  4  5]
#   [ 6  7  8]]
#  [[ 9 10 11]
#   [12 13 14]
#   [15 16 17]]
#  [[18 19 20]
#   [21 22 23]
#   [24 25 26]]]# [[0 1 2]
#  [3 4 5]
#  [6 7 8]]# [3 4 5]# 5# 5

切片

在各维度上单独切片,如果某维度数据都保留,直接使用冒号,不指定起始值和终值

从Numpy切片得到的数组,只是原来数组的一个视图,内部数据使用相同的存储地址,所以对切片得到的数组修改会影响原数组

print(arr2[0:2, 1, :])# [[ 3  4  5]
#  [12 13 14]]

布尔类型索引

利用布尔类型的数组进行数据索引,最终返回的结果是对应索引数组中数据为True位置的值。

ndarray-花式索引

花式索引(Fancy indexing)指的是利用整数数组进行索引的方式

import numpy as nparr1 = np.arange(32).reshape(8, 4)
print(arr1)
print("========= 获取 0,3,5 行的数据 =========")
print(arr1[[0, 3, 5]])
print("========= 获取 (0,0),(3,2),(5,2) 的数据 =========")
print(arr1[[0, 3, 5], [0, 2, 2]])
print("========= 获取 0,3,5 行 0,2,3 列的数据 =========")
print(arr1[[0, 3, 5]].T[[0, 2, 3]].T)
print(arr1[np.ix_([0, 3, 5], [0, 2, 3])])# [[ 0  1  2  3]
#  [ 4  5  6  7]
#  [ 8  9 10 11]
#  [12 13 14 15]
#  [16 17 18 19]
#  [20 21 22 23]
#  [24 25 26 27]
#  [28 29 30 31]]
# ========= 获取 0,3,5 行的数据 =========
# [[ 0  1  2  3]
#  [12 13 14 15]
#  [20 21 22 23]]
# ========= 获取 (0,0),(3,2),(5,2) 的数据 =========
# [ 0 14 22]
# ========= 获取 0,3,5 行 0,2,3 列的数据 =========
# [[ 0  2  3]
#  [12 14 15]
#  [20 22 23]]
# [[ 0  2  3]
#  [12 14 15]
#  [20 22 23]]

数组的转置与轴对换

数组转置是指将shape进行重置操作,并将其值重置为原始shape元组的倒置,比如原始的shape值为:(2,3,4),那么转置后的新元组的shape的值为: (4,3,2)f

对于二维数组而言(矩阵)数组的转置其实就是矩阵的转置

可以通过调用数组的transpose函数或者T属性进行数组转置操作

arr1 = np.arange(20).reshape(5,-1)
print(arr1)
arr2 = arr1.transpose()
print(arr2)
arr3 = arr1.T
print(arr3)#################
[[ 0  1  2  3][ 4  5  6  7][ 8  9 10 11][12 13 14 15][16 17 18 19]]
#################
[[ 0  4  8 12 16][ 1  5  9 13 17][ 2  6 10 14 18][ 3  7 11 15 19]]
#################
[[ 0  4  8 12 16][ 1  5  9 13 17][ 2  6 10 14 18][ 3  7 11 15 19]]

通用函数:快速的元素级数组成函数

ufunc:numpy模块中对ndarray中数据进行快速元素级运算的函数,也可以看做是简单的函数(接受一个或多个标量值,并产生一个或多个标量值)的矢量化包装器。

主要包括一元函数和二元函数

ndarray-通用函数/常用函数(一元函数)

一元ufunc

描述

调用方式

abs, fabs

计算整数、浮点数或者复数的绝对值,对于非复数,可以使用更快的fabs

np.abs(arr)

np.fabs(arr)

sqrt

计算各个元素的平方根,相当于arr ** 0.5, 要求arr的每个元素必须是非负数

np.sqrt(arr)

square

计算各个元素的评分,相当于arr ** 2

np.square(arr)

exp

计算各个元素的指数ex次方

np.exp(arr)

loglog10

log2log1p

分别计算自然对数、底数为10log、底数为2log以及log(1+x);要求arr中的每个元素必须为正数

np.log(arr)

np.log10(arr)

np.log2(arr)

np.log1p(arr)

sign

计算各个元素的正负号: 1 正数,0:零,-1:负数

np.sign(arr)

ceil

计算各个元素的ceiling值,即大于等于该值的最小整数

np.ceil(arr)

floor

计算各个元素的floor值,即小于等于该值的最大整数

np.floor(arr)

rint

将各个元素值四舍五入到最接近的整数,保留dtype的类型

np.rint(arr)

modf

将数组中元素的小数位和整数位以两部分独立数组的形式返回

np.modf(arr)

isnan

返回一个表示那些值是NaN(不是一个数字)”的布尔类型数组

np.isnan(arr)

isfiniteisinf

分别一个表示那些元素是有穷的(inf、非NaN)”或者那些元素是无穷的的布尔型数组

np.isfinite(arr)

np.isinf(arr)

coscoshsin

sinhtantanh

普通以及双曲型三角函数

np.cos(arr)

np.sin(arr)

np.tan(arr)

arccosarccosh

arcsin、arcsinh、

arctanarctanh

反三角函数

np.arccos(arr)

np.arrsin(arr)

np.arrtan(arr)

ndarray-通用函数/常用函数(二元函数)

二元ufunc

描述

调用方式

mod

元素级的取模

np.mod(arr1,arr2)

dot

求两个数组的点积

np.dot(arr1,arr2)

greatergreater_equalless

less_equalequalnot_equal

执行元素级别的比较运算,最终返回一个布尔型数组

np.greater(arr1, arr2)

np.less(arr1, arr2)

np.equal(arr1, arr2)

logical_andlogical_or

logical_xor

执行元素级别的布尔逻辑运算,相当于中缀运算符&|^

np.logical_and(arr1,arr2)

np.logical_or(arr1,arr2)

np.logical_xor(arr1,arr2)

power

求解对数组中的每个元素进行给定次数的指数值,类似于: arr ** 3

np.power(arr, 3)

聚合函数

聚合函数是对一组值(eg一个数组)进行操作,返回一个单一值作为结果的函数。当然聚合函数也可以指定对某个具体的轴进行数据聚合操作;常将的聚合操作有:平均值、最大值、最小值、方差等等

当axis=0表示列;axis=1表示行,不写代表计算整个矩阵的

arr = np.array([[1, 5, 7, 4], [0, 6, 3, 8], [2, 6, 9, 7]])
print(arr)
print('arr的最小值是:', arr.min())
print('arr的最大值是:', arr.max())
print('arr的平均值是:', arr.mean())
print('arr的标准差差是:', arr.std())
print('arr的方差是:', np.power(arr.std(),2))
print('arr中每一列的最小值是:', arr.min(axis=0))  # 当axis=0表示列;axis=1表示行
print('arr中每一列的最大值是:', arr.max(axis=0))
print('arr中每一列的平均值是:', arr.mean(axis=0))
print('arr中每一行的最小值是:', arr.min(axis=1))
print('arr中每一行的最大值是:', arr.max(axis=1))
print('arr中每一行的平均值是:', arr.mean(axis=1))###############################################################################
[[1 5 7 4][0 6 3 8][2 6 9 7]]
arr的最小值是: 0
arr的最大值是: 9
arr的平均值是: 4.833333333333333
arr的标准差差是: 2.733536577809454
arr的方差是: 7.472222222222221
arr中每一列的最小值是: [0 5 3 4]
arr中每一列的最大值是: [2 6 9 8]
arr中每一列的平均值是: [1.         5.66666667 6.33333333 6.33333333]
arr中每一行的最小值是: [1 0 2]
arr中每一行的最大值是: [7 8 9]
arr中每一行的平均值是: [4.25 4.25 6.  ]

np.where函数

np.where函数是三元表达式x if condition else y的矢量化版本

arr1 = np.array([-1.1,-1.2,-1.3,-1.4,-1.5])
arr2 = np.array([-2.1,-2.2,-2.3,-2.4,-2.5])
condition = (arr1<arr2)
result1 = [x if c else y for (x,y,c) in zip(arr1, arr2, condition)]  # 用于一维数组,不能用于多维
result2 = np.where(condition, arr1, arr2)  # 适合任何维度
print('使用python语法,结果为:', result1,';数据类型为:', type(result1))
print('使用np.where语法,结果为:', result2,';数据类型为:', type(result2))# 使用python语法,结果为: [-2.1, -2.2, -2.3, -2.4, -2.5] ;数据类型为: <class 'list'>
# 使用np.where语法,结果为: [-2.1 -2.2 -2.3 -2.4 -2.5] ;数据类型为: <class 'numpy.ndarray'>

将数组中的所有异常数字替换为0,比如将NaN替换为0

arr3 = np.array([
[1, 2, np.nan, 4],
[4, 5, 6, np.nan],
[7, 8, 9, np.inf],
[np.inf, np.e, np.pi, 4]
])
condition = np.isnan(arr3)|np.isinf(arr3)
print(arr3)
print(np.where(condition, 0, arr3))##############################################################3
[[1.         2.                nan 4.        ][4.         5.         6.                nan][7.         8.         9.                inf][       inf 2.71828183 3.14159265 4.        ]]
[[1.         2.         0.         4.        ][4.         5.         6.         0.        ][7.         8.         9.         0.        ][0.         2.71828183 3.14159265 4.        ]]

np.unique函数

np.unique函数的主要作用是将数组中的元素进行去重操作(也就是只保存不重复的数据)

arr1 = np.array(['a', 'b', 'c', 'a', 'd', 'c', 'e'])
arr2 = np.unique(arr1)
print('原始数据:', arr1)
print('去重之后的数据:', arr2)# 原始数据: ['a' 'b' 'c' 'a' 'd' 'c' 'e']
# 去重之后的数据: ['a' 'b' 'c' 'd' 'e']

 

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

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

相关文章

Python 第三方模块之 matplotlib - 绘图库

简介 matplotlib是受MATLAB的启发构建的。MATLAB是数据绘图领域广泛使用的语言和工具。MATLAB语言是面向过程的。利用函数的调用&#xff0c;MATLAB中可以轻松的利用一行命令来绘制直线&#xff0c;然后再用一系列的函数调整结果。 matplotlib有一套完全仿照MATLAB的函数形式…

微软P2V工具之Disk2VHD

虚拟化经过最近几年的发展&#xff0c;已经有很多的应用和服务迁移到了虚拟化的平台上了。在实施虚拟化的过程中就会涉及到将原来老旧的服务器来迁移到虚拟化平台的运行&#xff0c;这就是P2V&#xff0c;物理机转换为虚拟机。谈到P2V大家会想到很多的工具&#xff0c;例如Vmwa…

生成n套数位加减乘除_leetcode 算法汇总(四)位运算

一、 运算符& 与运算&#xff1a; 两个位都是 1 时&#xff0c;结果才为 1&#xff0c;否则为 0| 或运算&#xff1a; 两个位都是 0 时&#xff0c;结果才为 0&#xff0c;否则为 1^ 异或运算&#xff1a; 两个位相同则为 0&#xff0c;不同则为 1~ 取反运算&#xff1a;0 …

机器学习算法之 K-means、层次聚类,谱聚类

k-means 和层次聚类都属于划分聚类&#xff0c;实际中最常用的是k-means&#xff0c;k-means效果不好的情况下才会采用其他聚类 K-means算法 K-means算法&#xff0c;也称为K-平均或者K-均值&#xff0c;是一种使用广泛的最基础的聚类算法 假设输入样本为TX1,X2,…,Xm;则算法…

mapper注解的主要作用_Mybatis中mapper的xml解析详解

上一篇文章分析了mapper注解关键类MapperAnnotationBuilder&#xff0c;今天来看mapper的项目了解析关键类XMLMapperBuilder。基础介绍回顾下之前是在分析configuration的初始化过程&#xff0c;已经进行到了最后一步mapperElement(root.evalNode("mappers"))&#x…

机器学习之梯度下降法(GD)和坐标轴下降法(CD)

梯度下降法 梯度下降法&#xff08;Gradient Descent, GD&#xff09;常用于求解无约束情况下凸函数&#xff08;Convex Function&#xff09;的极小值&#xff0c;是一种迭代类型的算法&#xff0c;因为凸函数只有一个极值点&#xff0c;故求解出来的极小值点就是函数的最小值…

阿里云Https部署网站

0、开始之前 文章图片很多&#xff0c;注意流量 首先你得准备好一个已经备案成功的域名&#xff0c;并且有一个在阿里云的服务器部署了的网站。 然后就是你迫切的希望升级网站为HTTPS部署。 那么我们开始吧&#xff01; 1、申请CA证书 1.1登录阿里云控制台&#xff0c;选择菜单…

rabbitmq direct 多个消费者_一文解析 RabbitMQ 最常用的三大模式

Direct 模式所有发送到 Direct Exchange 的消息被转发到 RouteKey 中指定的 Queue。Direct 模式可以使用 RabbitMQ 自带的 Exchange: default Exchange&#xff0c;所以不需要将 Exchange 进行任何绑定(binding)操作。消息传递时&#xff0c;RouteKey 必须完全匹配才会被队列接…

C# 读取保存App.config配置文件的完整源码参考

最近出差在北京做一个小项目&#xff0c;项目里需要读取配置文件的小功能&#xff0c;觉得挺有参考意义的就把代码发上来给大家参考一下。我们选择了直接用微软的读取配置文件的方法。 这个是程序的运行设计效果&#xff0c;就是把这些参数可以进行灵活设置&#xff0c;灵活保存…

TensorFlow 简介

TensorFlow介绍 Tagline&#xff1a;An open-source software library for Machine Intelligence.Definition&#xff1a;TensorFlow TM is an open source software library fornumerical computation using data flow graphs.GitHub&#xff1a;https://github.com/tensorfl…

webbrowser设置为相应的IE版本

注册表路径&#xff1a; HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION 或者HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION 究竟选择哪一个…

jmeter压力测试_用Jmeter实现对接口的压力测试

一、多个真实用户对接口的压力测试1. 获取多个真实用户的token的两种方法&#xff1a;1)第一种&#xff1a;让开发帮忙生成多个token(多个用户账户生成的token)&#xff0c;导出为csv格式的文件(以下步骤均以该方法为基础)2)第二种&#xff1a;自己设置多个用户账户和密码&…

程序员成长之路(转)

什么时候才能成为一个专业程序员呢&#xff1f;三年还是五年工作经验&#xff1f;其实不用的&#xff0c;你马上就可以了&#xff0c;我没有骗你&#xff0c;因为专业程序员与业余程序员的区别主要在于一种态度&#xff0c;如果缺乏这种态度&#xff0c;拥有十年工作经验也还是…

嵌入式开发——PWM高级定时器

学习目标 加强掌握PWM开发流程理解定时器与通道的关系掌握多通道配置策略掌握互补PWM配置策略掌握定时器查询方式掌握代码抽取优化策略掌握PWM调试方式学习内容 需求 点亮8个灯,采用pwm的方式。 定时器 通道 <

TensorFlow 基本操作

Tensorflow基本概念 图(Graph):图描述了计算的过程&#xff0c;TensorFlow使用图来表示计算任务。张量(Tensor):TensorFlow使用tensor表示数据。每个Tensor是一个类型化的多维数组。操作(op):图中的节点被称为op(opearation的缩写)&#xff0c;一个op获得/输入0个或多个Tensor…

TensorFlow 分布式

一、简介 使用单台机器或者单个GPU/CPU来进行模型训练&#xff0c;训练速度会受资源的影响&#xff0c;因为毕竟单个的设备的计算能力和存储能力具有一定的上限的&#xff0c;针对这个问题&#xff0c;TensorFlow支持分布式模型运算&#xff0c;支持多机器、多GPU、多CPU各种模…

第五周测试

---恢复内容开始--- 一 视频知识 1 linux系统下如何区分内核态与用户态 在内核态&#xff1a;cs:eip可以是任意的地址&#xff0c;4G的内存地址空间 在用户态&#xff1a;cs:eip只能访问0x00000000—0xbfffffff的地址空间 2 系统调用的三层皮&#xff1a;xyz、system_call和sys…

latex公式对齐_Word 写公式最方便的方法

自从用上了word 2016之后&#xff0c;发现他的公式编辑器真香!真香!!他有了latex的优雅&#xff0c;又有了Mathtype的可视化效果&#xff0c;甚至更好哈&#xff0c;当编辑大量公式时也不会因为插件问题卡掉当前的努力。学起来也不复杂&#xff0c;反正是word. 强烈推荐。我们最…

路要怎么走?关于程序员成长的一点思考

程序员的我们&#xff0c;是否想过今后的路该怎么走、如何发展、技术怎样提高?其实这也是我一直在思考的问题。下面就此问题&#xff0c;分享下我的看法。因为我阅历有限&#xff0c;有什么说的不对的&#xff0c;大家见谅&#xff0c;千万不要喷…… 一、程序员应该打好基础 …

TensorFlow 常见API

数据类型转换相关API Tensor Shape获取以及设置相关API Tensor合并、分割相关API Error相关类API 常量类型的Tensor对象相关API 序列和随机Tensor对象相关API Session相关API 逻辑运算符相关API 比较运算符相关API 调试相关API 图像处理-编码解码相关API 图像处理-调整大小相关…