import numpy as np
# 生成ndarray
array = np.arange(1,10,5,dtype = np.int32) # 生成1-9间隔为5的ndarray
random_array = np.random.rand(10) # 生成10个随机0-1的数ndarray
array = np.random.randint(0,10,(2,3)) # 0-9生成2行3列矩阵
array = np.linspace(0,10,10) # 指定的间隔内返回均匀间隔的数字,等差数列
array = np.logspace(0,1,5) # 创建等比数列,从10的0次幂到1次幂,创建五个
array = np.array([1,2,3],dtype = np.int32) # 生成ndarray对象,元素的类型若不一致,会向下转换, dtype可以指定类型
# 构造矩阵
array = np.array([[1,2,3],[1,2,3]])
X,Y = np.meshgrid(x,y) # x:1*n y:1*m 生成矩阵X是行平铺垂直复制,Y是y列垂直铺水平复制,X,Y均是m*n
np.zeros((3,3)) # 构造3*3的0矩阵
np.ones((3,3),dtype = np.float32) # 构造3*3的1矩阵
np.ones(3)*8 # 构造元素为8的array
np.zeros_like(a) # 将a转为0array/矩阵
np.ones_like(a)
np.identity(5) # 构造5*5单位阵
# 构造向量
np.r_[0:10:1] # 0-9,间隔1,行向量
np.c_[0:10:1] # 0-9,间隔1,列向量
# 对矩阵的风格类型转换
array = np.array([1,2,3],dtype=np.float32) # array([1., 2., 3.], dtype=float32)
b = np.asarray(array,dtype=np.int32) # array([1, 2, 3])
c = b.astype('f') # 转换为float32类型
# 生成随机数/矩阵
r = np.random.rand() # 0-1之间float类型随机数
r = np.random.rand(3,2) # 3行2列随机数矩阵
r1 = np.random.randint(9) # 0-8之间的int类型随机数
r = np.random.randn() # 生成float类型数,不一定0-1范围内的
r = np.random.randn(3,3) # 3行3列float矩阵
r = np.random.randint(0,5,(2,2))
r = np.random.random_sample() # 随机浮点数
np.random.normal(0,0.1,10) # 生成μ = 0,σ = 0.1的正态分布,取10个点
# 运算
array + 1 # [2,3,4]
array1 = array.copy() # 拷贝内容并重新指向新的对象
array1 + array # [2,4,6]
np.multiply(x,y) #对x,y对应位置相乘
np.dot(x,y) # 对x,y做矩阵乘法
x == y # 返回对应索引的bool值
np.logical_and(x,y) # x与y
np.logical_or(x,y)
np.logical_not(x,y)
# 属性
array.shape # (3,)
array.shape = 2,5 # 改变数组形状
array.reshape(2,10,2) # 改变矩阵行数,列数,维数
array.size # 3,代表元素个数
array.itemsize # 4,一个元素的大小
type(array) # numpy.ndarray
tang_array.dtype # dtype('int32')
array.ndin # 1,维度
array.nbytes # 12,所占用内存大小
# 操作
array.fill(0) # [0,0,0],用0填充array
array.empty(6) # 生成长度为6的空array
array.clip(2,4) # 小于2值变为2,大于4的值变为4
array.round() # 四舍五入
array.round(decimals = 1) # 精度为0.1的四舍五入
np.searchsorted(he, values) # 返回将values插入排序后的he之中的索引值
array[np.newaxis,:] # 增加列维数
array.squeeze() # 去掉空维数
array.T # 转置矩阵
np.concatenate((a,b)) # 连接矩阵,默认垂直连接,b在a下
np.vstack((a,b)) # 垂直连接
np.hstack((a,b)) # 水平连接
np.flatten() # 拉平矩阵到一维,不影响原矩阵
np.ravel() # 拉平矩阵到一维,影响原矩阵
# 排序
np.sort(array) # 默认行,从小到大
np.sort(array,axis = 0)
np.argsort(array) # 按行排序,生成矩阵存放从小到大的索引值,可以修改axis值
np.lexsort([-1*a[:,2],a[:,0]]) # lexsort(条件1,条件2),条件2下条件1,返回索引
# 索引
array[0] # 索引0位置数
array[0:2] # 索引0,1位置数
array = np.array([[1,2,3],[1,2,3]])
array[1,1] # 2,[行,列]
array[:,1] # 第二列
array = np.arange(1,10,2)
mask = np.array([1,0,0,0,1],dtype=bool) # [True,False,False,False,True]
array[mask] # mask作为'掩码位',掩住False位
array_random = np.random.rand(5)
mask = array_random > 0.5
array[mask] # mask作为'掩码位',掩住False位
np.where(array > 0.5) # 求符合表达式的索引
array.argmin(axis = 0) # 求列最小值索引
array.argmax(axis = 0)
#统计
a = np.array([[1,2,3],[4,5,6]])
a.sum() # 求所有元素总和
a.sum(axis = 0) # 求以一维为轴的元素和,列和
a.mean(axis = 0) #列均值
a.var() # 求方差
np.cov(a) # 求协方差矩阵
a.prod() # 求所有元素积
a.prod(axis = 0) # 求列积
a.min() # 求最小值
a.min(axis = 0) # 求列最小
a.std() # 标准差
# 洗牌
np.random.shuffle(a) # 随机洗牌a
# 随机种子
np.random.seed(0) # 设置随机模式
# 读数据
data = []
with open('a.txt') as f:
for line in f.readlines():
f = line.split()
data.append(per_data)
data = np.array(data,dtype = np.int32)
data = np.loadtxt('a.txt',delimiter = ',',dtype = np.int32,skiprows = 1) # 读取a.txt分隔符','数据类型np.int32去掉第第一行不读
data = np.load('a.npy') # 读取a.npy
data = np.load('a.npz') # 读取压缩文件
data.keys() # 显示压缩文件中的文件名
# 写数据
np.savetxt('a.txt',a,fmt = '%d',delimiter = ',') # 将a写到a.txt,数据格式为%d,分隔符为,
np.save('a.npy',a) # 保存a为a.npy
np.savez('a.npz',a = a1,b = b1) # 将a1保存为a,b1保存为b,压缩到a.npz中
对axis的理解
axis可以理解为沿着列向下,和沿着行水平,也可以理解为维度
比如:2*2矩阵,axis=0,就为a00->a10 a01->a11方向
在pd.DataFrame中,pd.drop('col',axis = 1)表示选择col,找到列,然后跨列水平删除,要先把name聚类,功能相同
对np.argpartition理解
a = np.random.randint(1,20,(3,3))
# 将a拉成一维
a = np.ravel(a)
# 求出a的前三个小的数并返回索引,a再使用该索引取前三个,就找到了从小到大前三个数
a[np.argpartition(a,3)][:3]