numpy个人整理

import numpy as np

为提高运算效率,ndarray数组值的类型默认相同,创建时自动指定默认数据类型(内存占用最大的值类型) 
默认浮点类型(float)


numpy方法解释
np.dtype指定当前numpy对象的整体数据, 见下一个表格
np.itemsize对象中每个元素的大小, 单位字节
np.size对象元素的个数, 相当于np.shape中的n*m值
np.shape轴, 查看数组形状, 对于矩阵, n行m列
np.ndim
np.isnan(list)筛选出nan值
np.iscomplex(list)筛选出非复数
~取补运算符
np.array(数组, dtype=np.bool)自定义数组类型
np.astype(np.bool)转换存放数据类型
np.mat()将python 列表转化成矩阵,比如将二维数组,转化为矩阵,方便运算
np.mat().getA()将matrix对象转成ndarray对象,维度不变;getA1()直接转化为一维ndarray对象
np.matrix()同上
np.asmatrix()将ndarray对象转成matrix对象
np.tile()重复某个数组。比如tile(A,n),功能是将数组A重复n次,构成一个新的数组传送门
np.T矩阵转置, 行变列, 列变行, 对角线翻转矩阵,相当于np.transpose()
np.tolist()转换成python列表, 用于和python原生结合写程序
np.multiply(x, y)矩阵x 矩阵y相乘
np.unique()数组去重, 并且从小到大生成一个新的一维数组或二维数组
np.arange同python range(),生成的对象为ndarray类型的
np.arange(24).reshape((2, 3, 4))创建一个2维3行4列的数组, 必须能被给定的长度除开, 可以索引和切片
np.arange(24).resize((2, 3, 4))在一个创建好的np对象上修改原来的维度,创建一个新的对象
np.linspace(x, y, z)等间距生成, x起始数值, y终止数值, z为产生的数据点数;也就是在区间x,y中产生z个点
np.ones(shape, dtype=None, order='C')生成数值为1且shape形状的的数组, shape可以是元组,表示创建几行几列数据;也可以是单个数字,表示创建大小为n的一维数组
np.zeros(shape, dtype=None, order='C')生成数值为0且shape形状的的数组, shape可以是元组,表示创建几行几列数据;也可以是单个数字,表示创建大小为n的一维数组
np.full([x, y], z)自定义模板数组, 生成x行y列都是z的数组
np.eye(N, M=None, k=0, dtype=float, order='C')生成大小为N的对角方阵,对角线的值都是1,其余都是0;M可以调整输出列数
np.flatten()np对象降维成一维,不改变原值
np.random.rand(x, y, z)生成一个一维x随机数或生成x*y的随机数组
np.random.randn(x, y)正态分布随机数
np.random.randint(low, high, (shape))整数随机数
np.random.normal(loc, scale, (size))从指定正态分布中抽取样本, loc为概率分布的均匀值, 标准差scale
np.random.seed(s)给一个随机数字固定
np.randomunifrom(low, high, (size))均匀分布的数组, 有小数
np.random.shuffle(a)将数组a的第0轴(最外维度)进行随机排列(洗牌), 改变数组a, 行边列不变
np.random.permutation(a)同上, 不改变数组a
np.random.choice(a, size=None, replace=False, p=数组a/np.sum(b))从一维数组a中以概率p抽取元素,形成size形状新数组,replace表示是否可以重用元素,默认为False,p为抽取概率,本位置越高,抽取概率越高
np.sum(axis=None)求和, axis=0为列, 1为行
np.argsort()按照矩阵中的元素大小进行排序,输出的是元素对应的下标
np.sort(a, kind='quicksort',axis=None)从小打大排序,默认quicksort;axis=None是将多维放在一维中排序;axis=-1多维数组按行排序;axis=0按列排序;
-np.sort(-a, axis=None)从大到小排序
np.sort_values(‘字段’, ascending=False)排序,升序排列
np.mean(axis=None)求平均数,axis=0同列取平均值,axis=1同行取平均值
np.average(axis=None,weights=None)加权平均,weights加权值,不设为等权重,例子[10, 5, 1],每列分别X10,X5,X1在/(10+5+1)
np.var(axis=None)方差:各数与平均数之差的平方的平均数
np.std(axis=None)标准差:方差平方根
np.min(axis=None)最小值
np.argmin(axis=None)求数组中最小值的坐标
np.median(axis=None)中位数
np.ptp(axis=None)元素最大值与最小值的差
np.cumsum()累加,cumsum和cumprod之类的方法不聚合,产生一个中间结果组成的数组,默认一维数组,1为按原样
np.cumprod()累乘
np.count_nonzero(arr > 0)计数非0值个数,布尔值会被强制转换为1和0,可以使用sum()对布尔型数组中的True值计数
np.bools.any()测试数组中是否存在一个或多个True
np.bools.all()数组中所有值是否都是True, 测试有没有空值
np.insert(arr, obj, values, axis=None)插入数值,np.insert(a, [1], [[1],[2],[3]], axis=1)在第一列插入一个列表;axis=None插入到一维数组中;axis=1插入到列;axis=0插入到行
np.dot(a, b, out=None)求乘积运算,如果a,b同为数字,则计算两个数的乘积;如果为两个向量,则计算两个向量的内积;如果为多维数组,则计算的是多维数组的向量积的和;同数组,同np.array对象,一般使用X_.T.dot(X_)
np.linalg.inv(a)求矩阵的逆,ainv = inv(np.matrix(a)),因为矩阵不能直接相除,所以有时需要转化为矩阵的逆来做乘法运算,矩阵的逆就是用来解决矩阵除法问题的
np.select(condlist, choicelist, default=0)condlist定义筛选规则,choicelist做筛选时需要做的操作
np.column_stack((a,b))将a作为b的一列合并到b,a为一维列表,b为1到多维列表,必须满足a的列表大小等于b的行数,
np.concatenate((a, b), axis=0)

合并数组,axis=0按行合并,axis=1按列合并;np.concatenate((a, b.T), axis=1);采用b.T的前提是必须a和b的维度相同,如果b为一维,a为二维的话,需要使用np.stack(b)将b转化为二维的列数据才可以进行合并

np.asarray(a, dtype)将a数据转化为固定的类型;array和asarray都可以将结构数据转化为ndarray,但是主要区别就是当数据源是ndarray时,array仍然会copy出一个副本,占用新的内存,但asarray不会
np.where(condition, x=None, y=None)满足条件(condition),输出x,不满足输出y
np.ravel(order='C')将多维数组降维成一维数组,返回原始多维数组的引用注意如果改变降维后一维数组的值,则原始数组的值也会改变;order为降维时采用的策略,可选值{'C', 'F', 'A', 'K'},默认行序优先
np.flatten(order='C')将多维数组降维成一维数组,返回原始多维数组的拷贝,改变降维后的一维数组的值,则原始数组的值不会改变;order为降维时采用的策略,可选值{'C', 'F', 'A', 'K'},默认行序优先
np.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)返回从起始值到终止值总数量为num的列表,endpoint为True表示包含终止值
np.meshgrid(*xi, **kwargs)meshgrid的作用是根据传入的两个一维数组参数生成两个数组元素的列表。如果第一个参数是xarray,维度是xdimesion,第二个参数是yarray,维度是ydimesion。那么生成的第一个二维数组是以xarray为行,ydimesion行的向量;而第二个二维数组是以yarray的转置为列,xdimesion列的向量。
np.array(p_object, dtype=None, copy=True, order='K', subok=False, ndmin=0)转化列表数据类型为ndarray
np.c_[xx.ravel(), yy.ravel()]将两个数组中相同列的数据拼接起来,当做行;类似于pandas中的merge
np.r_[xx.ravel(), yy.ravel()]将两个数组中所有行数据转化为一行数据;类似于pandas中的contact
data.reshape(-1, m)表示事先不知道数据总数有多少个,numpy会自动计算数据的总数n,变化成为n列m行的数据
np.vstack([a,b])

将a,b两个numpy对象按行堆叠到一块,列不变

np.hstack(arr1, arr2)将两个数组进行堆叠,可以是一维或者多维(tuple/list),相当于分别合并
np.around(SVD, 4)将矩阵SVD中所有元素四舍五入保留四位小数
np.linalg.norm(x, ord=None, axis=None, keepdims=False)求矩阵x的范数,默认相当于求向量或者矩阵的平方和的平方根,具体请参加下面函数详细讲解
np.linalg.svd(a, full_matrices=True, compute_uv=True)奇异矩阵分解,在推荐系统中有举足轻重的地位
np.diag(v, k=0)如果v为多维数组的话,则返回对角元组的一个一维数组;如果v为一维数组的话,则返回一个对角元素填充一维数组的值,其余元素补充为0的一个矩阵;k值可以为正负值,默认为0

 np.where详细讲解参考链接

np.dtype类型 
np.bool布尔值
np.int整型
np.float浮点型
np.complex复数
np.object对象
np.string_ASCII字符
np.unicode_

Unicode所有字符, 字节数平台决定

np读取csv文件

  • numpy提供了便捷的内部文件存取,将数据存为np专用的npy(二进制格式)或npz(压缩打包格式)格式
  • npy格式以二进制存储数据的,在二进制文件第一行以文本形式保存了数据的元信息(维度,数据类型),可以用二进制工具查看查看内容
  • npz文件以压缩打包文件存储,可以用压缩软件解压
# 读取csv文件
np.loadtxt(frame,dtype=np.float,delimiter=None,skiprows=0,usecols=None,unpack=False)
# 去掉b'0.00'中的b
np.loadtxt('a.csv', dtype=bytes, delimiter=',').astype(str)
c = np.load('x.npy')                    # .npy文件读入数组
d = np.load("y.npz")                    # .npz压缩包读入

# 存储csv文件,本身是ASCII字符,不能存储非ASCII字符串,csv文件只能存储一维、二维数据,不能存储多维数据
np.savetxt(frame,array,fmt='%.18e',delimiter=None)
np.save('a.npy',a)                      # 存为.npy文件
np.savez("a.npz", ar0 = a, ar1 = b)     # 多个数组存入一个.npz压缩包
参数解释
参数解释
frame文件、字符串或产生器,可以是.gz或者bz2压缩文件
dtype数据类型,可选,CSV的字符串以什么数据类型读入数组中,默认np.float
delimiter分隔字符串,默认是任何空格,改为逗号
skiprows跳过前x行,一般跳过第一行表头
usecols读取指定的列,索引,元组类型
unpack如果True,读入属性将分别写入不同的数组变量,False读入数据只写入一个数组变量,默认False

难点函数解析

1、numpy.linalg.svd

函数:np.linalg.svd(a,full_matrices=1,compute_uv=1)。

参数:

  • a是一个形如(M,N)矩阵

  • full_matrices的取值是为0或者1,默认值为1,这时u的大小为(M,M),v的大小为(N,N) 。否则u的大小为(M,K),v的大小为(K,N) ,K=min(M,N)。

  • compute_uv的取值是为0或者1,默认值为1,表示计算u,s,v。为0的时候只计算s。

返回值:

  • 总共有三个返回值u,s,v
  • u大小为(M,M),s大小为(M,N),v大小为(N,N)。

  • A = u*s*v

  • 其中s是对矩阵a的奇异值分解。s除了对角元素不为0,其他元素都为0,并且对角元素从大到小排列。s中有n个奇异值,一般排在后面的比较接近0,所以仅保留比较大的r个奇异值。 

关于奇异值的解释:

  • 对于方阵而言A=QQ-1     其中的就是特征向量。但是对于不是方阵的矩阵而言就没有特征向量。
  • 非方阵的矩阵可以用奇异值分解来描述这个矩阵。A=UVT。其中U叫做左奇异值叫做奇异值V叫做右奇异值。因为只有对角线的数不为0,并且数值是从大到小排列,所以一般只取r个,r的值越接近A的列数,那么三个矩阵的乘法得到的矩阵越接近A。
  • 因为三个矩阵的面积之和远远小于原矩阵A,所以当我们向压缩空间表达A的时候,可以使用这三个矩阵。
  • 当A不是矩阵的时候,把A转置变为 AT。并且。其中的v就是右奇异值。,这里的就是上面的奇异值。,这里的u就是上面的左奇异值。

2、np.linalg.norm(x, ord=None, axis=None, keepdims=False)

①x: 表示矩阵(也可以是一维)

②ord:范数类型

向量的范数:

矩阵的范数:

ord=1:列和的最大值

ord=2:|λE-ATA|=0,求特征值,然后求最大特征值得算术平方根

ord=∞:行和的最大值

ord=None:默认情况下,是求整体的矩阵元素平方和,再开根号

③axis:处理类型

axis=1表示按行向量处理,求多个行向量的范数

axis=0表示按列向量处理,求多个列向量的范数

axis=None表示矩阵范数。

④keepding:是否保持矩阵的二维特性

True表示保持矩阵的二维特性,False相反
 

另外一篇总结不错的博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值