form1.cn
Make a little progress every day

numpy的基本使用方法整理

16th of February 2020 Linux tensorflow 1522

import numpy as np


一、创建数组


像python原生一样创建数组

array = np.array([i for i in range(10)])
Out: array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])


全零数组

np.zeros(10,dtype=int)
Out: array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0])


全1数组

np.ones(10,dtype=int)
Out:array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1])


指定值数组

np.full(10,23,dtype=float)
Out:array([23., 23., 23., 23., 23., 23., 23., 23., 23., 23.])

二,创建矩阵


全零矩阵

np.zeros(shape=(3,5),dtype=float)
Out:array([[0., 0., 0., 0., 0.],
       [0., 0., 0., 0., 0.],
       [0., 0., 0., 0., 0.]])

   

全1矩阵

np.ones(shape=(3,5),dtype=int)
Out:array([[1, 1, 1, 1, 1],
       [1, 1, 1, 1, 1],
       [1, 1, 1, 1, 1]])

   

指定值矩阵

np.full(shape=(3,5), fill_value=123, dtype=int)
Out:array([[123, 123, 123, 123, 123],
       [123, 123, 123, 123, 123],
       [123, 123, 123, 123, 123]])


三,其它函数

np.arange中的步长可以传小数
np.arange(1,10,0.9)
Out:array([1. , 1.9, 2.8, 3.7, 4.6, 5.5, 6.4, 7.3, 8.2, 9.1])
np.linspace中第三个参数等长的接出几个数,间距是相等的,终止点是包含在内的
np.linspace(1,20,10)
Out:array([ 1.        ,  3.11111111,  5.22222222,  7.33333333,  9.44444444,
       11.55555556, 13.66666667, 15.77777778, 17.88888889, 20.        ])

   

在0-10之间随机一个数

np.random.randint(0,10)


随机一个向量

np.random.randint(0,10,size=8)


随机一个矩阵

np.random.randint(0,10,size=(3,5))


添加随机种子,可方便在使用相同随机数调试数据

np.random.seed(1)
np.random.randint(0,10,size=(3,5))


浮点随机数

np.random.random(1)
array([0.20445225])


浮点随机矩阵

np.random.random(size=(3,5))
Out:array([[0.87811744, 0.02738759, 0.67046751, 0.4173048 , 0.55868983],
       [0.14038694, 0.19810149, 0.80074457, 0.96826158, 0.31342418],
       [0.69232262, 0.87638915, 0.89460666, 0.08504421, 0.03905478]])

   

随机正太分布浮点数

np.random.normal()
Out:0.04221374671559283
np.random.normal(10 ,100) # 提定均值和方差
Out:68.28152137158222
np.random.normal(loc=0.0, scale=1.0, size=(3,5)) # 指定size可创建矩阵
Out:array([[-1.10061918,  1.14472371,  0.90159072,  0.50249434,  0.90085595],
       [-0.68372786, -0.12289023, -0.93576943, -0.26788808,  0.53035547],
       [-0.69166075, -0.39675353, -0.6871727 , -0.84520564, -0.67124613]])
reshape改变或转换向量为二维数,不能整除列数会报错   
array = np.arange(15)   
array.reshape(3,5)
x.reshape(-1,10) # 一行10列
x.reshape(5,-1) # 两行5列  -1为会自动计算

  

四,基本操作

array = np.arange(15).reshape(3,5)
array.ndim # 查看是几维数组
array.shape # 查看数组形状
array.size # 元素个数
array[2,3] # 第2行3列的值,python中的切片语法也可应用到numpy中
array[:2,:3] #取前两行的前三列,返回一个矩阵
注:[2,3] 2代表行的操作,3代表对列表操作
array[:, 0] #取第一列,返回一个向量
subX = X[:2,:3].copy() #考虑效率问题numpy创建后是一个引用,用copy可以让子矩阵和父矩阵脱离关系


五,分割操作

np.concatenate拼接数组,矩阵也可拼接 但只能处理维度一样的情况
x = np.array([1,2,3])
y = np.array([4,5,6])
np.concatenate([x,y,....可有多个], axis=1) #axis默认为0,可改变拼接方向
np.vstack可以直接在 垂直方向 拼接维度不一样的情况
np.vstack([x,Y])
np.hstack可以直接在 水平方向 拼接维度不一样的情况
np.hstack([x,Y])
split分割,split同样也可以分割矩阵
x1,x2,x3 = np.split(z,[3,5])  # 返回3端数据:1为0-2,2为3-4,3为5-9

vsplit横向分割

cy = np.arange(16).reshape(4,4)
up,dm = np.vsplit(cy,[2])

hsplit纵向分割

le,rh = np.hsplit(cy,[-1]) #将最后一列和前面的列分隔