NumPy、Pandas、Scipy是python的三个库,也是数据分析的常用库。NumPy便于存储和处理多维数组(N-dimensional array)ndarray,这里简单说明NumPy的使用,更多内容查看NumPy官方文档。
安装包
pip install numpy
载入包
import numpy as np
1.生成数组
NumPy有多种生成数组的方式
(1)基本用法
常用方法 | 说明 | 输入 |
---|---|---|
array | 可输入列表、元组生成ndarry | np.array([[1,2.0], [0,0],(1+1j,3.)]) |
zeros / ones | 生成全为0或1的矩阵 | np.zeros((2,3)) |
eye | 生成对角线为1其余为0矩阵 | np.eye(6,7,1, dtype=int)k=1为斜线偏移值
|
arange | 可输入起终点、步距的矩阵 | np.arange(2,10,2) |
linsapce / logspace | 生成整数或对数的等间距数列 | np.linspace(0,20, 5,endpoint= False, retstep=True ) |
linspace,这里num=5,不设定则默认50;endpoint默认True,为闭区间,False为开区间;retstep默认False, True则返回间距;同样的还有logspace。
>>> np.array([[1,2.0], [0,0],(1+1j,3.)])
array([[1.+0.j, 2.+0.j],
[0.+0.j, 0.+0.j],
[1.+1.j, 3.+0.j]])
>>> np.zeros((2,3))
array([[0., 0., 0.],
[0., 0., 0.]])
>>> np.eye(6,7,1,dtype=int)
array([[0, 1, 0, 0, 0, 0, 0],
[0, 0, 1, 0, 0, 0, 0],
[0, 0, 0, 1, 0, 0, 0],
[0, 0, 0, 0, 1, 0, 0],
[0, 0, 0, 0, 0, 1, 0],
[0, 0, 0, 0, 0, 0, 1]])
>>> np.arange(2,10,2)
array([2, 4, 6, 8])
>>> np.linspace(0,20, 5,endpoint= False, retstep=True )
(array([ 0., 4., 8., 12., 16.]), 4.0)
(2)random生成随机数
常用方法 | 说明 | 输入 |
---|---|---|
random.rand | 生成[0,1)的随机数 | np.random.rand(2,3) |
random.randn | 生成一组正态分布的数据, 标准正态分布的可用random.standard_normal | 2*np.random.randn(2,3)+4 |
random.randint | 返回离散均匀[a,b)范围的值,如果只输入一个值默认为[0,a)范围 | np.random.randint(2,10,size=(2,4)) |
random.shuffle / random.permutation | 改变序列顺序 | a=np.arange(12).reshape(3,4) np.random.shuffle(a) |
- 同样的还有beta, binomial, chisquare, geometric等,分别生成beta分布, binomial二项分布, chisquare卡方分布, geometric几何分布的随机数。这些都有共通性的,设定分布参数、形状。eg.二项分布np.random.binomial(n, p, size=a)(n次试验,p成功概率,生成size形状数组)
>>> np.random.rand(2,3)
array([[0.22128075, 0.31974379, 0.5859686 ],
[0.3307407 , 0.18200795, 0.59027476]])
>>> 2*np.random.randn(2,3)+4
array([[4.65342832, 3.16739484, 5.30323633],
[1.50943009, 4.36887803, 3.90668209]])
>>> np.random.randint(2,10,size=(2,4))
array([[3, 2, 4, 5],
[2, 4, 3, 5]])
>>> a = np.arange(12).reshape(3,4)
>>> np.random.shuffle(a)
>>> a
array([[ 0, 1, 2, 3],
[ 8, 9, 10, 11],
[ 4, 5, 6, 7]])
2.数组处理
(1)基本用法
常用方法 | 说明 | 输入 |
---|---|---|
reshape | 改变形状 | np.arange(2,10).reshape(2,4) |
T | 转置 | np.arange(2,10).reshape(2,4).T |
concatenate / append | 连接/增加矩阵 | np.concatenate((x,y), axis=1) / np.append(x,y,axis=1)axis默认为0,对应行
|
split | 分离 | np.split(x, [1, 2, 4],axis=1)axis默认为0,对应行
|
tile | 重复 | np.tile(x,(2,3)) (2,3)为沿轴复制的次数,分别对应0, 1轴
|
delete | 删除 | np.delete(a,(1,3),axis=0) (1,3)删除的位置,axis默认为None,None则平展矩阵
|
insert | 插入 | np.insert(a,(1,2),[[1],[3],[5]],axis=1)(1,2)插入位置,[[1],[3],[5]]插入数值,axis默认None
|
>>> np.arange(2,10).reshape(2,4)
array([[2, 3, 4, 5],
[6, 7, 8, 9]])
>>> np.arange(2,10).reshape(2,4).T
array([[2, 6],
[3, 7],
[4, 8],
[5, 9]])
>>> x = np.array([[3,4,5],[1,2,3]])
>>> y = np.array([[5],[4]])
>>> np.concatenate((x,y), axis=1)
array([[3, 4, 5, 5],
[1, 2, 3, 4]])
>>> np.append(x,y,axis=1) #两者输出一样
array([[3, 4, 5, 5],
[1, 2, 3, 4]])
>>> x = np.arange(12).reshape(4,3)
>>> np.split(x, [1, 2, 4])
[array([[0, 1, 2]]), array([[3, 4, 5]]), array([[ 6, 7, 8],
[ 9, 10, 11]]), array([], shape=(0, 3), dtype=int32)]
>>> x = np.array([[2,3,4],[1,0,7]])
>>> np.tile(x,(2,3))
array([[2, 3, 4, 2, 3, 4, 2, 3, 4],
[1, 0, 7, 1, 0, 7, 1, 0, 7],
[2, 3, 4, 2, 3, 4, 2, 3, 4],
[1, 0, 7, 1, 0, 7, 1, 0, 7]])
>>> a = np.arange(12).reshape(3,4)
>>> np.delete(a,(1,3),1)
array([[ 0, 2],
[ 4, 6],
[ 8, 10]])
>>> np.insert(a,(1,2),[[1],[3],[5]],1)
array([[ 0, 1, 1, 1, 2, 3],
[ 4, 3, 5, 3, 6, 7],
[ 8, 5, 9, 5, 10, 11]])
3.按条件截取数组
>>> a = np.arange(20).reshape(4,5)
>>> a
array([[ 0, 1, 2, 3, 4],
[ 5, 6, 7, 8, 9],
[10, 11, 12, 13, 14],
[15, 16, 17, 18, 19]])
- 选取一行 a[n] / 多行a[n:m] / 间隔选择多行 a[n:m:a] a为步距
>>> a[1]
array([5, 6, 7, 8, 9])
>>> a[1:3]
array([[ 5, 6, 7, 8, 9],
[10, 11, 12, 13, 14]])
>>> a[::2]
array([[ 0, 1, 2, 3, 4],
[10, 11, 12, 13, 14]])
- 选取一列a[:,n] / 多列a[:, n:m] /间隔选择多列 a[:,n:m:a] a为步距
>>> a[:,1]
array([ 1, 6, 11, 16])
>>> a[:,1:5:2]
array([[ 1, 3],
[ 6, 8],
[11, 13],
[16, 18]])
- 选择n行m列数 a[n,m]
>>> a[1,2]
7
网友评论