Numpy的一些个人笔记

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]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值