Numpy 是Python中用于科学计算的基础包,广泛应用于数据分析和挖掘
numpy的核心基础是N维数组,
使用numpy首先需要安装numpy包,
在pycharm中创建好项目可以alt+F12打开terminal终端面板输入pip install numpy
待下载完毕后可通过alt+ctrl+s-numpy projectnumpy -python interpreter中查看是否安装成功
L = [[1,2,3],[2,3,4]] # 定义一个二维数组
import numpy as np # 导入numpy包使用as关键字进行重命名
A = np.array(L) # 调用np包中的array()函数,将L转化为二维数组并赋给A
print(type(A)) # 使用type关键字查看A的数据类型 是一个ndarray类型
print(type(L)) # 是一个列表类型
import numpy as np # 导入numpy 调用array()函数,创建数组
# 创建数组的方法number(1)
# 利用Numpy中的array()函数特定的数据类型转化为数组
# 预定义列表a1 元祖a2,列表a3、a4,元祖a5、a6
a1 =[1,2,4]
a2 = (1,'a',{'name':"join"})
a3 = [[2,3,4],(3,4,5)]
a4 = [[1,2],[7,8,9]]
a5 = (('a','b','c'),['1','2','3'])
a6 = ((1.2,3,4),(2,3,4))
a11 = np.array(a1)
a22 = np.array(a2)
a33 = np.array(a3)
a44 = np.array(a4,dtype=object)
a55 = np.array(a5)
a66 = np.array(a6)
print(a11,a22,a33,a44,a55,a66)
注意:
第14行代码嫁了dtype=object是为了解决a4不规则嵌套列表所引发的警告
如果出现多数不规则嵌套的话 可以通过添加以下代码解决问题
import warnings
warnings.filterwarnings("ignore", category=Warning)
使用del删除生成的ndarray变量
del a11,a22,a33,a44,a55,a66
利用内置函数可以创建一些特殊的数组,可以学习使用ones(),zeros(),arange()函数
# 利用内置函数创建数组
import numpy as np
z1 = np.ones((3,3)) # 创建3行3列全为1的数组(二维)
z2 = np.zeros((3,4)) # 创建3行4列全为0 的数组 (二维)
z3 = np.arange(10) # 默认初始值为0,默认步长为1,末尾值为9的一维数组
z4 = np.arange(2,10) # 初始值为2,默认步长为1,末位值为9
z5 = np.arange(2,10,2) # 初始值为2,步长为2,末位值为9
print("z1的结果为:",z1)
print("z2的结果为:",z2)
print("z3的结果为:",z3)
print("z4的结果为:",z4)
print("z5的结果为:",z5)
下面是代码的输出结果:
使用数组中的shape属性,返回值为元祖。
一维数组返回的是元素的长度,有一个值,
二维数组返回的是两个值,前一个表示行数,后一个表示列数
——代码如下:
# 数组尺寸(数组大小) d1 = [1.2,42,4,2,4,5,6,73,4] d2 =[[12,34,2,4],[23,4,1,4]] import numpy as np d11 =np.array(d1) # 将列表转换为一维数组,赋给变量d11 d22 = np.array(d2) #将嵌套列表转换为二维数组,赋给变量d22 d111=d11.shape # 返回一维数组d11的大小,付给变量d111 d222=d22.shape # 返回二维数组d22的大小,赋给变量d222 print(d111) print(d222)
结果为
(9,)(2,4)
import numpy as np # 数组重新排列 r=np.array(range(9)) r1=r.reshape((3,3)) print(r1)
上述代码解释:
使用range函数生成从0开始9个数字的一维数组,在使用reshape函数排为3行3列的数组规格。
数组之间加减乘除、乘方,以及数学函数的运算。
# 数组运算 import numpy as np A = np.array([[1,2],[3,4]]) B = np.array([[1,2],[2,1]]) C1 = A-B # 两数组相减 C2 = A+B # 两数组相加 C3 = A*B # 两数组相除 C4 = A/B #两数组相乘 C5 = A/3 # 数组所有元素除以3 C6 = 1/A # 1除以数组所有元素 C7 = A ** 2 # 数组所有元素平方 C8 = np.array([1,2,3,4,5,6,7,8,9]) C9 = (C8-min(C8))/(max(C8)-min(C8)) # 对C8中的元素做级差化处理 D = np.array([[1,2,3,4],[5,6,7,8],[9,10,11,12],[13,14,15,16]]) # 数学运算 E1 = np.sqrt(D) # 平方根 E2 = np.abs([1,-2,-100]) # 取绝对值 E3 = np.cos([1,2,3]) # 取cos值 E4 = np.sin(D) # 取 sin 值 E5 = np.exp(D) # 取指数函数值 print(E5)数组切片
切片即抽取数组中的部分元素构成新的数组
# 数组切片 import numpy as np D = np.array([[1,2,3,4],[5,6,7,8],[9,10,11,12],[13,14,15,16]]) # 访问D中行为1,列为2的数据,行、列从0开始数起 D1 = D[1,2] D2 = D[:,[1,3]] # 访问D中的1,3列数据 D3 = D[[1,3],:] # 访问D中1,3行数据 Dt1 = D[D[:,0]>5,:] # 选取D中第0列大于5的数据 Dt2 = D[D[:,0]>5,[2,3]] #选取D中第0列大于5的2,3列数据 TF = [True,False,False,True] Dt3 = D[TF,:] # 取D中0,3行的所有列数据,取逻辑值为真的行 Dt4 = D[TF,[2,3]] # 取D中0,3行2,3列数据 D5 = D[D>4] # 取D中大于4的所有元素数组的欺骗也可以通过ix_()函数构造行,列下标索引来实现。
# 数组切片 import numpy as np D = np.array([[1,2,3,4],[5,6,7,8],[9,10,11,12],[13,14,15,16]]) # 选取D中行数为1,2列数为,1,3的所有元素 D3 = D[np.ix_([1,2],[1,3])] #提取行数为0,1,列数为1、3的所有元素 D4=D[np.ix_(np.arange(2),[1,3])] # 提取以D中第1列小于11得到的逻辑数组作为行索引,列数为1,2的所有元素 D5 = D[np.ix_(D[:,1]<11,[1,2])] # 提取以D中第1列小于11得到的逻辑数组作为行索引,列数为2的所有元素 D6 = D[np.ix_(D[:,1]<11,[2])] TF = [True,False,False,True] D7 = D[np.ix_(TF,[2])] D8 = D[np.ix_(TF,[1,3])]数组连接
数组连接分为水平连接,垂直连接(水平连接,hstack())(垂直连接vstack())
# 数组连接 import numpy as np A = np.array([[1,2],[3,4]]) B = np.array([[5,6],[7,8]]) # 注意:输入参数为两个代连接数组组成的元祖 C_s = np.hstack((A,B)) # 水平连接要求行数相同 C_v = np.vstack((A,B)) # 垂直连接要求列数相同数据存取
利用Numpy包中的save()函数,可以将数据集保存为二进制数据文件,扩展名为.npy
使用load()函数加载数据集
import numpy as np
A = np.array([[1,2],[3,4]])
B = np.array([[5,6],[7,8]])
C_s = np.hstack((A,B)) # 水平连接
# sava()函数,保存为二进制文件,扩展名为.npy
np.save('data',C_s)
# 使用load()函数加载数据及
C_sava = np.load('data.npy')
print(C_sava)
输出加载的数据
import numpy as np arr = np.array([5,2,3,3,1,-5,9,8,6,7]) arr1 = np.sort(arr) # 升序 print(arr1) arr2 = -np.sort(-arr) # 降序 print(arr2) # Numpy包提供的argmax()和argmin()函数,可以返回待搜索数组的最大值和最小值元素的索引值 arr3 = np.array([5,2,3,3,1,1,9,8,6,7,8,8]) arr4 = arr3.reshape(3,4) # 三行四列 maxindex =np.argmax(arr3) minindex =np.argmin(arr3) # 如果存在多个最大值或最小值,则返回第一次出现的索引值。 print(maxindex) print(minindex) # 对于二维数组可以设置 maxindex1=np.argmax(arr4,axis=0) # 返回各列最大值的索引值 minindex1=np.argmax(arr4,axis=1) # 返回各行最小值的索引值矩阵的运算
Numpy包的matrix()函数继承自Numpy的二维ndarray对象,不仅拥有ndarry的属性方法和函数
同时Numpy中的matrix函数和线性代数中的矩阵概念几乎完全相同,含有转置矩阵,共轭矩阵、逆矩阵等概念。
在Numpy中可以使用mat()、matrix()或bmat()函数来创建矩阵
使用mat()函数创建矩阵时,若输入matrix或ndarry对象,则不会为它们创建副本。
因此,调用mat()函数与调用matrix(data,copy=False)等价。
实例代码如下:
# 矩阵线性代数运算
import numpy as np
mat1 = np.mat("1,2,3;4,5,6;7,8,9")
mat2 = np.matrix([[1,2,3],[4,5,6],[7,8,9]])
# print(mat1)
# print(mat2)
在Numpy中可以使用bmat()分块矩阵(将小矩阵合并为大矩阵)
矩阵的特有属性及其说明如下:
在Numpy中,矩阵计算和ndarry计算类似,都能欧作用于每个元素,比起使用for循环进行计算。矩阵计算更加高效
import numpy as np
mat1 = np.mat("1 2 3; 4 5 6; 7 8 9")
print(mat1)
mat2 = mat1*3
print(mat2)
mat3 =mat1+mat2
print(mat3)
mat4 = mat1-mat2
print(mat4)
mat5 = mat1*mat2
print(mat5)
mat6 = np.multiply(mat1,mat2) # 点乘
print(mat6)
线性代数计算
线性代数是数学的一个重要分支,Numpy包含numpy.linalg模块,提供线性代数所需的功能,如矩阵相乘,计算逆矩阵,求解线性方程组
求解特征值与特征向量、奇异值分界以及计算矩阵行列式的值等。
numpy.linalg模块中的一些常用函数如下图所示
在线性代数中,矩阵A与其逆矩阵B相乘,得到一个单位矩阵,E即A×B=E。使用numpy.linalg
矩阵可以对向量进行线性变换,对应数学中的线性方程组
numpy.linalg模块中的solve()函数可以求解形如Ax = b
的线性方程组,其中A为矩阵,b为一维或二维数组,x是位置变量。
实例代码如下:
设A是N阶方阵,如果存在数a和非零N维向量,x,使得Ax=ax成立,则称a是A的一个特征值,非零n维列向量x称为矩阵A的对应于特征值a的特征向量。
numpy.linalg模块中的eigvalues()函数可以求解矩阵的特征值,eig()函数可以返回一个包含特征值和对应特征向量的元祖,示例代码如下:
矩阵行列式是指矩阵的全部元素构成的行列式,但构成行列式的矩阵为方阵时,行列式存在。numpy.linalg模块中的det()函数可以计算矩阵行列式的值。示例代码如下:
import numpy as np
A = np.mat('1,2;4,4')
print(A)# 生成两行两列的矩阵
A_value = np.linalg.det(A)
print(A_value) # 计算这个方阵行列式的值
本次对numpy包的基础学习使用,个人讲解到此结束!!!
如果有前辈大牛们,发现文章中有错误、不足之处,请在评论区指出!!!



