numpy基础数据类型ndarray
多维数组的定义及属性
import numpy as np
ar=np.array([1,2,3,4]) :a=[1 2 3 4]与列表的区别是没有,
ar.ndim 维度也称rank"秩",可从左往右数[的个数,第1个[则为第一轴
ar.shape 类型如(1,4)也为(4,)
ar.size 元素的总个数
ar.dtype 元素的类型
ar.itemsize 每个元素的字节大小
ar.data 实际元素在缓冲器的位置,不常用
创建数组
np.arange(10) #0-9整型
np.arange(5,12) #5-11
np.arange(2,10,2) #步长为2
np.linspace(2.0,10.0,num=5,retstep=True,endpoint=False) #num默认50,endpoint默认
#True,retstep返回实际步长
np.zeros((1,2),dtype=np.int) #默认为np.float64
np.zeros_like(ar1)
np.ones()
np.eye(5) #5*5的单位对角矩阵,对角为1,其余为0
#numpy基本索引及切片
基本索引
ar=np.arange(16)
ar.reshape(4,4)
ar[2] :[8,9,10,11]
ar[][]
ar[1:3] :第二行和第三行
ar[1:3,2:4]:第二行和第三行中的第3列和第4列
i=np.array([True,False,True])
ar[i,:] #支持bool索引
即可利用它筛选某一些值:
ar1=ar[ar>3]
m=ar>5 :可得到一个对应bool类型的数组
复制
ar.copy()
np.random
np.random.random
np.random.random([3.4]) #生成[3,4]浮点数,浮点数都是从0-1中随机。
np.random.normal
np.random.normal(loc=0,scale=1.0,size=(2,2)) #均值为0方差为1
np.random.rand
np.random.rand(2,2) #[0,1)均匀分布
np.random.randn(2,2) == np.random.normal(size=(2,2))#不能更改均值和标准差,正态分布
np.random.randint
np.random.randit(low,high=None,size=None,dtype="l")#生成[low,high),[0,low)整数
随机种子
rng=np.random.RandomState(10)
rng.randn() #不变
numpy通用函数
形状修改
ar=np.ones((2,3,4))
ar.T :(4,3,2) #转置
np.reshape(ar,( , )) / ar.reshape( , ) #生成新数组
np.resize(ar,(,)) / ar.resize() #后一种更改原数组,更改前后元素个数可不一样,按原元素循环排列
类型转换
ar2=ar1.astype(np.int32)
堆叠
a.shape=(2,1)
b.shape=(2,1)
ar1.stack((a,b)) :增加在axis上的维度 .shape=(2,2,1)
ar1.stack((a,b),axis=1) :.shape=(2,2,1)
数组拆分
ar1=np.hsplit(ar,2) :横向平均拆分,即第一维度会改变
ar1=np.vsplit(ar,2) :纵向平均拆分,即第二维度会改变
运算
ar = np.arange(6).reshape(2,3)
ar + 10 # 加法
ar * 2) # 乘法
1 / (ar+1) # 除法
ar ** 0.5 # 幂
# 与标量的运算
ar.mean() # 求平均值
ar.max() # 求最大值
ar.min() # 求最小值
ar.std() # 求标准差
ar.var() # 求方差
ar.sum(), np.sum(ar,axis = 0)) # 求和,np.sum() → axis为0,按列求和,即改变axis=0的值;axis为1,按行求和,即改变axis=1的值
np.sort(np.array([1,4,3,2,5,6])) # 排序