Numpy入门学习
numpy库学习
在此只介绍常用的简单的一些接口以入门,详细内容可参考官网或中文帮助文档:
https://www.numpy.org/
https://www.numpy.org.cn/index.html
1. 基本结构
基本属性:dtype,size,shape,ndim,fill等;
切片与索引:与Python一致;
矩阵:查找某列array[0,1:3](1到3列第0行),赋值: = 是引用,复制:copy(),构造等差数组0到100 差为10: np.arange(0,100,10);
掩模:mask=array1>0.5;array2[mask];
指定数据类型:np.asarray(array,dtype = np.float32)
import numpy as np
array=np.array([1,2,3,4,5])
array
array([1, 2, 3, 4, 5])
array+1
array([2, 3, 4, 5, 6])
ndarray=np.array([1,2,3,4.4,5,'ss'])
ndarray
array(['1', '2', '3', '4.4', '5', 'ss'], dtype='<U32')
基本属性
ndarray.dtype
dtype('<U32')
ndarray.shape
(6,)
ndarray.size
6
ndarray.ndim
1
矩阵
matrix=np.array([[1,2,3],[4,5,6],[7,8,9]])
matrix
array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
matrix[1:]#后两行
array([[4, 5, 6],
[7, 8, 9]])
matrix[1,0:2]#第一行从0列开始取2个
array([4, 5])
juzhen=matrix#直接赋值是引用
juzhen[2,2]=0
matrix
array([[1, 2, 3],
[4, 5, 6],
[7, 8, 0]])
matrix
array([[1, 2, 3],
[4, 5, 6],
[7, 8, 0]])
fjuzheng=matrix.copy()#复制
fjuzheng[1,1]=0
fjuzheng
array([[1, 2, 3],
[4, 0, 6],
[7, 8, 0]])
matrix
array([[1, 2, 3],
[4, 5, 6],
[7, 8, 0]])
mya=np.arange(10,100,23)
mya
array([10, 33, 56, 79])
mya.reshape(2,2)#重新构建为2x2矩阵形式
array([[10, 33],
[56, 79]])
mask=mya>40
mask
array([False, False, True, True])
mya[mask]
array([56, 79])
np.asarray(mya,dtype = np.float32)
array([10., 33., 56., 79.], dtype=float32)
2. 运算
内部元素的计算:求和:sum();累乘:prod();均值:mean();标准差:std();方差:var();找索引:argmin()等;四舍五入:round();拉伸clip();
数组与数组间的运算:
对应位置相乘:multiply();矩阵乘法dot();与或非:logical_and,logical_or,logical_not
a=np.array([1.1,2.2,3.3,4.4,5.1,6.2,7.3,8.4,9.9,10.8,11.7,12.6])
a.reshape(4,3)
array([[ 1.1, 2.2, 3.3],
[ 4.4, 5.1, 6.2],
[ 7.3, 8.4, 9.9],
[10.8, 11.7, 12.6]])
b=a.sum()+a.prod()+a.mean()+a.std()+a.var()
b
1073893946.6267273
a.argmax()
11
c=a.round().copy()
c
array([ 1., 2., 3., 4., 5., 6., 7., 8., 10., 11., 12., 13.])
d=c.clip(3,10)
d
array([ 3., 3., 3., 4., 5., 6., 7., 8., 10., 10., 10., 10.])
a=np.array([1,2,3,4,5,6,7,8,9,8,7,6])
b=np.array([9,8,7,6,5,4,3,2,1,1,2,3])
a.shape=4,3
b.shape=3,4
#np.multiply(a,b)
np.dot(a,b)
array([[ 22, 19, 19, 19],
[ 67, 58, 55, 52],
[112, 97, 91, 85],
[113, 98, 89, 80]])
c=np.array([9,8,7,6,6,5,4,3,3,2,1,0])
c.shape=4,3
np.multiply(a,c)
array([[ 9, 16, 21],
[24, 30, 30],
[28, 24, 27],
[16, 7, 0]])
a*c
array([[ 9, 16, 21],
[24, 30, 30],
[28, 24, 27],
[16, 7, 0]])
np.logical_and(a,c)
array([[ True, True, True],
[ True, True, True],
[ True, True, True],
[ True, True, False]])
np.logical_or(a,c)
array([[ True, True, True],
[ True, True, True],
[ True, True, True],
[ True, True, True]])
np.logical_not(a,c)
array([[0, 0, 0],
[0, 0, 0],
[0, 0, 0],
[0, 0, 0]])
3. 数组
生成:arange();linspace();logspace();格网: np.meshgrid(x,y);行向量:np.r_[0:10:1];列向量:np.c_[0:10:1];0向量:np.zeros(3)/np.ones(3);单位矩阵:np.identity(5);
形状维度:array[np.newaxis,:]增加新维度;array.squeeze()压缩;array.transpose()/array.T转置;np.concatenate((a,b))#链接; np.concatenate((a,b),axis = 0)#竖着拼接;np.vstack((a,b))#v竖着;np.hstack((a,b))#h横着;a.flatten()#拉平;a.ravel()#拉平
排序:sort();argsort()
a=np.arange(5,8,0.5)#最后一个参数是分割距离
a
array([5. , 5.5, 6. , 6.5, 7. , 7.5])
b=np.linspace(5,10,5)#最后一个参数是取值个数
b
array([ 5. , 6.25, 7.5 , 8.75, 10. ])
a=np.logspace(0,3,4)
a
array([ 1., 10., 100., 1000.])
np.meshgrid(a,b)
[array([[5. , 5.5, 6. , 6.5, 7. , 7.5],
[5. , 5.5, 6. , 6.5, 7. , 7.5],
[5. , 5.5, 6. , 6.5, 7. , 7.5],
[5. , 5.5, 6. , 6.5, 7. , 7.5],
[5. , 5.5, 6. , 6.5, 7. , 7.5]]),
array([[ 5. , 5. , 5. , 5. , 5. , 5. ],
[ 6.25, 6.25, 6.25, 6.25, 6.25, 6.25],
[ 7.5 , 7.5 , 7.5 , 7.5 , 7.5 , 7.5 ],
[ 8.75, 8.75, 8.75, 8.75, 8.75, 8.75],
[10. , 10. , 10. , 10. , 10. , 10. ]])]
np.r_[1:9:3]
array([1, 4, 7])
np.c_[1:9:3]
array([[1],
[4],
[7]])
np.ones(3,dtype=int)
array([1, 1, 1])
np.identity(3)
array([[1., 0., 0.],
[0., 1., 0.],
[0., 0., 1.]])
a=np.arange(5,8,0.5)
#b=np.linspace(5,10,5)
a
array([5. , 5.5, 6. , 6.5, 7. , 7.5])
a[np.newaxis,:,np.newaxis]
array([[[5. ],
[5.5],
[6. ],
[6.5],
[7. ],
[7.5]]])
a.shape=2,3
a
array([[5. , 5.5, 6. ],
[6.5, 7. , 7.5]])
a[0,2]=0
a[1,2]=0
a
array([[5. , 5.5, 0. ],
[6.5, 7. , 0. ]])
b=a.T
b
array([[5. , 6.5],
[5.5, 7. ],
[0. , 0. ]])
c=a
np.concatenate((a,c),axis = 1)
array([[5. , 5.5, 0. , 5. , 5.5, 0. ],
[6.5, 7. , 0. , 6.5, 7. , 0. ]])
a.flatten()
array([5. , 5.5, 0. , 6.5, 7. , 0. ])
a.ravel()
array([5. , 5.5, 0. , 6.5, 7. , 0. ])
4. 随机模块
#所有的值都是从0到1
np.random.rand(2,2)
array([[0.71729093, 0.54947991],
[0.50235575, 0.97256068]])
#返回的是随机的整数,左闭右开
np.random.randint(100,size = (2,3))#100以内的随机数2行3列
array([[90, 41, 75],
[55, 65, 73]])
np.random.random_sample()#0-1之间的随机数
0.4315886964827691
np.random.randint(0,10,3)#0-10找3个数
array([4, 0, 6])
mu, sigma = 0,0.1#高斯分布
a=np.random.normal(mu,sigma,9)#9个数
a
array([ 0.17, -0.06, 0.05, -0.1 , 0.06, -0.08, -0.13, -0.09, 0.17])
np.set_printoptions(precision = 2)#设置打印精度
np.random.shuffle(a)#洗牌
a
array([-0.09, 0.05, 0.17, -0.06, -0.08, 0.06, -0.13, 0.17, -0.1 ])
np.random.seed(10)#设置种子后随机的方法是一样的
mu, sigma = 0,0.1
np.random.normal(mu,sigma,10)
array([ 0.13, 0.07, -0.15, -0. , 0.06, -0.07, 0.03, 0.01, 0. ,
-0.02])
5. 数据读写
%%writefile aaa.txt
1 2 3 4 5 6
2 3 5 8 7 9
Writing aaa.txt
data = []
with open('aaa.txt') as f:
for line in f.readlines():
fileds = line.split()#空格切分
cur_data = [float(x) for x in fileds]
data.append(cur_data)
data = np.array(data)
data
array([[1., 2., 3., 4., 5., 6.],
[2., 3., 5., 8., 7., 9.]])
data=[]
data = np.loadtxt('aaa.txt')
data
array([[1., 2., 3., 4., 5., 6.],
[2., 3., 5., 8., 7., 9.]])
data = np.loadtxt('aaa.txt',delimiter = ' ')#分隔缝读取
data
array([[1., 2., 3., 4., 5., 6.],
[2., 3., 5., 8., 7., 9.]])
data = np.loadtxt('aaa.txt',delimiter = ' ',skiprows = 1)#去掉第一行
data
array([2., 3., 5., 8., 7., 9.])