Numpy科学计算
与Python列表比的优缺点
Python提供了array模块,它和列表不同,能直接保存数值,但是由
于它不支持多维数组,也没有各种运算函数,因此也不适合做数值
运算
查看版本信息
import numpy as np
print(np.__version__)
数组的属性
a=np.array([1,2,3,4])#把列表转换为数组
type(a)#类型
a.shape#尺寸
shape 返回tuple,表示数组的尺寸
a.ndim#查看维度
ndim 返回int,表示数组的维数
b=a.T#一维数组不分行列
a.tolist()#转为列表
a=np.array((1,2,3,4))#把元组转换为数组
np.array(range(5))#range对象转换成数组
a.size#元素个数
size 返回int,表示数组的总元素
a.dtype#数据类型
dtype 返回data-type,描述数组中元素类型
a.itemsize#元素大小,字节
itemsize 返回int,表示数组每个元素的大小(字节为单位)
数组的创建
#数组的内置的一些方法
np.arange(8)
np.arange(0,10,2)#左闭右开
np.linspace(0,10,21)#等差数组,元素间隔(10-0)/(21-1)
np.logspace(0,100,11)#对数数组,10为底
np.logspace(1,6,6,base=2)#2为底,幂为等差数列
np.zeros(3)#全零的一维数组
np.ones(3)#全一的一维数组
a=np.ones((3,3))#全一的二维数组
np.zeros_like(a)#和a的形状一样,全零
5*np.ones_like(a)#生成全为5的数组
np.full((3,2),5)#生成全为5的数组
np.identity(3)#单位数组3*3
np.diag([1,2,3,4])#对角数组,除对角线之外的元素全为零
np.empty((6,3))#空数组,元素值不确定
np.random.randint(0,50,5)#随机整数,不包括50
np.random.rand(5)#0到1之间随机浮点数
import numpy as np
np.random.seed(5)#固定种子,随机数生成
np.random.rand(5)#0到1之间随机浮点数
查看帮助
np.random.seed?
help(np.random.seed)
np.random.standard_normal(size=(3, 4)) #二维数组,标准正态分布
np.random.normal(0.5,0.1,size=(3, 4)) #均值,标准差,shape
np.random.shuffle(a)#打乱顺序
数据类型的转换
np.float64(43)#浮点数转换
np.int32(78.0)
np.bool(0.001) = True
np.bool(0.00) = False
np.float(True) =1.0
a.astype(np.float)#转换为想要的数据类型
#缺失值,随机浮点数
a=np.nan
np.isnan(a)#对缺失值进行判断
a==np.nan#不能进行判断 = False
np.nan==np.nan#False
2*np.nan = nan
np.nan-np.nan = nan
数组元素的索引
一维数组的索引
a=np.random.randn(5)#一维数组索引
a[0] 取0位置上的
a[1:4:2]#切片 取第1,3位置上的
a[:4] 取0到3
a[3:] 取3,4
a[-1]#最后一个
a[0::2]#切片
a[4:1:-2]#反着取
多维数组的索引
1到所有行,列中的2到所有列
变换数组的形态
reshape新生成
b=a.reshape(6,2) #新生成操作,元素总数要一致
a=np.arange(198)
a.reshape(3,-1) #3行,列自动计算,198/3,要求整除
a.reshape(-1,3)#3列,行自动计算
resize原地修改
a=np.arange(12)
a=a.resize(3,4) #原地修改,返回值为空
结果不能赋值给a
flatten展平,降维
revel展平
转置(T二维,swapaxes)三维及以上
stack堆叠
concatenate拼接
split分割
数组的运算
数组与数值的运算
a*2数组中每个元素乘2
a+10数组中每个元素加2
a//2数组中每个元素整除2
a**2数组中每个元素平方
数组与数组的运算
数组的shape一样情况
a:int32,b:float64a+b各个位置上的元素相加,结果浮点型
a:int64,b:int64a*b各个位置上的元素相乘,结果int64
数组的shape不一样
一维数组的广播机制
a.shape=(3,3)
b.shape=(3,)一维部分行列
a+b,向其中shape最长的数组看齐
二维数组的广播
让所有输入数组都向其中shape最长的数组看齐, shape中不足的部
分都通过在前面加1补齐
输出数组的shape是输入数组shape的各个轴上的最大值
如果输入数组的某个轴和输出数组的对应轴的长度相同或者其长度
为1时,这个数组能够用来计算,否则出错
当输入数组的某个轴的长度为1时,沿着此轴运算时都用此轴上的第
一组值
判断能否计算:shape补齐后,两个对应轴的长度要么一致,要么为1,才能进行计算
矩阵操作
矩阵(Matrix)和数组(Array)的区别主要有以下两点:
矩阵只能为2维的,而数组可以是任意维度的
矩阵对象是ndarray的子类。因此它继承了ndarray的所有属性和方法
a=np.matrix([1,2,3]) #生成矩阵是二维
(2,3)
(3,2)
a*b #矩阵乘法,第二个矩阵的行要等于第一个矩阵的列
b=np.array([1,2,3])
a=np.array([[1,2,3],[4,5,6]]) #2x3
b=np.array([[1,2,3],[4,5,6],[4,4,4]])#3x3
np.dot(a, b) #实现的是矩阵的乘法
numpy数据的保存和读取
保存和读取
单个数组的保存和读取
a=np.arange(16).reshape(4,4)
np.save('a1',a) #保存单个数组
np.load('a1.npy')#读取单个数组
多个数组的保存和读取
a=np.arange(16).reshape(4,4)
b=np.arange(16).reshape(2,8)
np.savez('ab',a1=a,b1=b)#保存两个数组
ab=np.load('ab.npz') #读取
保存为txt格式
savetxt
保存np.savetxt(r'D:\a.txt',a)
,loadtxt
读取np.loadtxt('a.txt')
使用numpy进行统计分析
排序
一维数组的排序
a.sort() #原地排序
a.mean() #优先考虑,做了优化工作
np.sort(a) #新生成
np.mean(a)
二维数组的排序
a.sort(axis=0) #沿着0轴排序
a.sort(axis=1) #沿着1轴排序
返回排序后的索引值
a.argsort() #从小到大排序,返回其对应的索引值
a.argsort(axis=1) #沿着1轴排序
a.argsort(axis=0) #沿着0轴排序
去重复和重复
np.unique(a) #去重复
一维:array([5, 1, 2, 1, 2, 9, 1, 9, 7, 5])
np.tile(a,3) #对整个数组进行重复3次
np.repeat(a,3) #对单个元素进行重复
二维:array([[0, 1],
[2, 3]])
np.tile(a,(3,3)) #两个轴重复
np.repeat(a,3,axis=1) #沿着1轴进行重复
np.repeat(a,3,axis=0) #沿着0轴进行重复
填充
常用统计函数
sum
a.sum() #mean,max #优先考虑
np.sum(a)
np.cumsum(a)#累计和
np.cumprod(a)#累计积
a.sum(axis=0)
a.sum(axis=1)
a.mean(axis=0)
max,min
a.max(axis=0)
np.argmax(a) #最大元素的索引
a.min(axis=0)
np.argmin(a,axis=0) #最小元素的索引
a.var(axis=0) #方差
std
a.std(axis=0) #标准差
a.std()得出一个数
列表 数组 矩阵互相转换
列表》数组,列表》矩阵
L=[[1,2],[3,4]]
np.array(L)
b=np.mat(L)
数组》列表,数组》矩阵
a=np.array(L)
a.tolist()
np.mat(a)
矩阵》列表,矩阵》数组
c=np.mat(L)2*2
c.tolist()
np.array(c)
c.getA()2*2
numpy作业
创建一个 3x3 的单位数组
np.identity(3)
np.eye(3)
创建一个 3x3x3的随机数组
arr = np.random.random((2,2)) #参数是元组的形式
np.random.rand(2,2) #参数只能是数值型的
创建一个二维数组,其中边界值为1,其余值为0
arr = np.ones((10,10))
arr[1:-1,1:-1] = 0
创建一个8x8 的矩阵,并且设置成棋盘样式
arr = np.zeros((8,8),dtype=int)
arr[1::2,::2] = 1 #偶数行,所有的奇数列
arr[::2,1::2] = 1 #奇数行,所有的偶数列
考虑一个 (4,5) 形状的数组,其第6个元素的索引(x,y)是什么
np.arange(20).reshape(4,5)
np.unravel_index(6-1,(4,5))
对一个5x5的随机数组做归一化
arr = np.random.random((5,5))
arrmax, arrmin = arr.max(), arr.min()
arr = (arr - arrmin)/(arrmax - arrmin)
arr
给定一个一维数组,对其值在3到8之间的所有元素取反
案例:鸢尾花数据、醉汉漫步








暂无数据