一级目录
NumPy简介
NumPy(Numerical Python) 是 Python 语言的一个扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。NumPy 的科学计算十分高效,因此弥补了 Python 在运算效率上的不足。正是因为 NumPy,Python 才可以像 MATLAB 那样高效地执行矩阵运算。
NumPy 的前身 Numeric 最早是由 Jim Hugunin 与其它协作者共同开发,2005 年,Travis Oliphant 在 Numeric 中结合了另一个同性质的程序库 Numarray 的特色,并加入了其它扩展而开发了 NumPy。NumPy 为开放源代码并且由许多协作者共同维护开发。
NumPy 是一个运行速度非常快的数学库,主要用于数组计算,包含:
(1)一个强大的N维数组对象 ndarray
(2)广播功能函数
(3)整合 C/C++/Fortran 代码的工具
(4)线性代数、傅里叶变换、随机数生成等功能
windows系统下可通过如下的方法查看pycharm开发工具下是否导入numypy库。打开pycharm,新建python项目,在菜单栏打开settings设置。打开如下图,即可查看是否按照。
import numpy as np
注:在 Python 内导入 NumPy 库,「np」简写即调用NumPy 时约定俗成的命名。
NumPy基本属性
#numpy数据库的使用
import numpy as np
# python array
a = [1,2,3,4,5,6,7,8,9]
# numpy array
A = np.array([[1,2,3,4,5,6,7,8,9],
[1,2,3,4,5,6,7,8,9]])
print("a为",a)
print("A为",A)
print(type(a))
print(type(A))
print("shape:",A.shape) #数组的形状行数和列数
print("Dim of A:",A.ndim) #数组的几维的
print("Size of A:",A.size) #数组的大小,总共有几个元素
结果为
a为 [1, 2, 3, 4, 5, 6, 7, 8, 9]
A为 [[1 2 3 4 5 6 7 8 9]
[1 2 3 4 5 6 7 8 9]]
<class ‘list’>
<class ‘numpy.ndarray’>
shape: (2, 9)
Dim of A: 2
Size of A: 18
数组的形状是它有多少行和列,上面的数组有5行和5列,所以它的形状是(5,5)。
itemsize 属性是每个项占用的字节数。
ndim 属性是数组的维数。这个有2个。例如,向量只有1。
nbytes 属性是数组中的所有数据消耗掉的字节数。你应该注意到,这并不计算数组的开销,因此数组占用的实际空间将稍微大一点。
那么为什么要使用 NumPy 数组而不使用标准的 Python 数组呢?原因可能是 NumPy 数组远比标准数组紧密,在使用同样单精度变量下,NumPy 数组所需要的内存较小。此外,NumPy 数组是执行更快数值计算的优秀容器。
numpy的基本操作
基本操作1
np.arange()
np.zeros
np.linspace
# numpy的基本操作
import numpy as np
a=np.array([2,3,4],dtype=np.float32) #dtype定义了矩阵的数值类型是整形或者浮点float或者int
print(a)
b=np.zeros((3,4)) #3乘4全为1的矩阵
c=np.ones((3,4)) #3乘4全为1的矩阵
d=np.arange(10,20,2) #arange功能类似于python中的range功能,arange(首,尾,步长)
e=np.arange(16).reshape((4,4)) #尺寸和形状
f=np.linspace(1,26,6).reshape((2,3)) #直线型矩阵(首,尾,段数),形状
print(b)
print(c)
print(d)
print(e)
print(f)
基本操作2
(1) 基本操作
# 加减法乘法平方
import numpy as np
a=np.array([10,20,40,34]) #array后的格式括号里面套中括号
b=np.arange(4)
c=a-b
print(a+b,"###",c)
print(b**2) #一般b的平方是b^2在python中为双雪花符号
# print(np.sin(c)) #求sin计算
# print(c)
# print(c<3) #运算c中小于3的数值,小于3输出True否则输出False,同样c==3判断等于3的位置
d=a*b #为对应位置逐个相乘
d_dot=np.dot(a,b) #按照矩阵乘法相乘 ,该式和d_dot_2=a.dot(b)等价
print(d)
print(d_dot)
(2)基本操作
# numpy中的基本操作
import numpy as np
a=np.random.random((2,4))
print(a)
# print(np.sum(a)) #求和
# print(np.max(a)) #最大值
# print(np.min(a)) #最新值
print(np.sum(a,axis=1)) #axis=1代表在行数中求和
print("****************")
print(np.max(a,axis=0)) # axis=0代表在列数中的最大值
print("****************")
print(np.min(a,axis=1))
(3)基本操作
# numpy中的基本操作
import numpy as np
A=np.arange(1,25).reshape((4,6))
print(A)
# print(np.argmin(A)) #矩阵A中的最小值位置索引
# print(np.argmax(A)) #矩阵A中的最大值位置索引
print(np.mean(A)) #与print(A.mean())和print(np.average(A))等价
print(np.median(A)) #求中位数
print(np.cumsum(A)) # 累加
print(np.diff(A)) #相邻的数相减
print(np.sort(A)) # 逐行的排序(从小到大)
print(A.T) #矩阵A的转置矩阵
print(np.clip(A,6,12)) #A矩阵中小于6的数设置为6,大于12的数设置为12,中间的不变
print(np.mean(A,axis=1)) #A矩阵中按照行输出平均值
numpy的索引
# numpy中的基本操作
import numpy as np
A=np.arange(1,25).reshape((4,6))
print(A)
# print(A[1][1]) #与print(A[1,1])是一样的功能
# print(A[1,:]) #表示打印第一列的所有数 print(A[:,2])
# print(A[1,1:2]) #表示第一行第一列第二个位置的数字,注意行和列都是从0数起
for row in A: #迭代行
print(row)
for col in A.T: # 迭代列
print(col)
print(A.flatten())
for item in A.flat: # 迭代每一项
print(item)
numpy中array的合并、分割与复制
(1)numpy中的合并
# numpy中array的合并
import numpy as np
a=np.array([1,1,1])[:,np.newaxis] #加上[:,np.newaxis]后就变为纵向的矩阵
b=np.array([2,3,4])[:,np.newaxis]
c=np.vstack((a,b)) #垂直维度合并
d=np.hstack((a,b)) #水平维度合并
print(c)
print(d)
print(c.shape,d.shape)
f=np.concatenate((a,a,b,b),axis=1) # axis=1是横向合并;axis=0是垂直向合并
print(f)
(2)numpy中的分割
# numpy中array的分割
import numpy as np
a=np.arange(12).reshape((3,4))
print(a)
# print(np.split(a,4,axis=1)) #split是等分,若要进行不等分的分割np.array_split()d的方法
print(np.array_split(a,2,axis=1))
print(np.vsplit(a,3)) #垂直方向分割
print(np.hsplit(a,2)) #垂直方向分割
(3)numpy中的copy
#numpy的 copy & deep copy
import numpy as np
a=np.arange(4)
# print(a)
b=a
c=a
a[0]=13# a,b,c三者之间是关联的改变一个另个也会改变
c[0]=12
print(a)
print(b) #a和b始终是同一个对象
b=a.copy() #deep copy
a[2]=22
print(a)
print(b)