numpy库

生成数组

列表转数组

>>> import numpy as np
>>> np.array((1,2,3,4,5))
array([1, 2, 3, 4, 5])

range对象转数组

>>> np.array(range(5))
array([0, 1, 2, 3, 4])

生成等差数组

>>> np.linspace(0,10,11) #将11个数均匀分配到(1,10)区间上
array([ 0.,  1.,  2.,  3.,  4.,  5.,  6.,  7.,  8.,  9., 10.])

对数数组

np.logspace(start=开始值,stop=结束值,num=元素个数,base=指定对数的底, endpoint=是否包含结束值)
>>> np.logspace(0,100,10)
array([1.00000000e+000, 1.29154967e+011, 1.66810054e+022, 2.15443469e+033,
       2.78255940e+044, 3.59381366e+055, 4.64158883e+066, 5.99484250e+077,
       7.74263683e+088, 1.00000000e+100])

全0二维数组

>>> np.zeros((3,3))
array([[0., 0., 0.],
       [0., 0., 0.],
       [0., 0., 0.]])

全0一维数组

>>> np.zeros((3,1))
array([[0.],
       [0.],
       [0.]])
>>> np.zeros((1,3))
array([[0., 0., 0.]])

全1二维数组

>>> np.ones((3,3))
array([[1., 1., 1.],
       [1., 1., 1.],
       [1., 1., 1.]])

全1一维数组

>>> np.ones((1,3))
array([[1., 1., 1.]])

单位矩阵

>>> np.identity(3)
array([[1., 0., 0.],
       [0., 1., 0.],
       [0., 0., 1.]])

空数组

  • 只申请空间而不初始化,元素值是不确定的
>>> np.empty((3,3))
array([[1., 0., 0.],
       [0., 1., 0.],
       [0., 0., 1.]])

数组与数值的算术运算

创建数组对象

>>> x=np.array((1,2,3,4,5))
>>> x
array([1, 2, 3, 4, 5])

数组与数值相乘\除\整除\加\余数

>>> x*2
array([ 2,  4,  6,  8, 10])
>>> x/2
array([0.5, 1. , 1.5, 2. , 2.5])
>>> x//2
array([0, 1, 1, 2, 2], dtype=int32)
>>> x+2
array([3, 4, 5, 6, 7])
>>> x%3
array([1, 2, 0, 1, 2], dtype=int32)

幂运算

>>> x**3
array([  1,   8,  27,  64, 125], dtype=int32)

数组与数组的算术运算

数组与数组相乘\除\加\减

>>> a=np.array((1,2,3))
>>> b=np.array(([1,2,3],[4,5,6],[7,8,9]))
>>> a*b #a中的每个元素乘以b中的每一列元素
array([[ 1,  4,  9],
       [ 4, 10, 18],
       [ 7, 16, 27]])
>>> a+a
array([2, 4, 6])
>>> a-a
array([0, 0, 0])
>>> a/a
array([1., 1., 1.])

二维数组转置

>>> b
array([[1, 2, 3],
       [4, 5, 6],
       [7, 8, 9]])
>>> b.T
array([[1, 4, 7],
       [2, 5, 8],
       [3, 6, 9]])

向量内积

>>> c=np.array((5,6,7))
>>> d=np.array((6,6,6))
>>> c.dot(d)
108
>>> np.dot(c,d)
108
>>> 

数组元素访问

>>> b
array([[1, 2, 3],
       [4, 5, 6],
       [7, 8, 9]])
>>> b[0]
array([1, 2, 3])
>>> b[0][0]
1

对数组进行函数运算

>>> z=np.arange(0,100,10)
>>> np.sin(z)
array([ 0.        , -0.54402111,  0.91294525, -0.98803162,  0.74511316,
       -0.26237485, -0.30481062,  0.77389068, -0.99388865,  0.89399666])
>>> b
array([[1, 2, 3],
       [4, 5, 6],
       [7, 8, 9]])
>>> np.cos(b)
array([[ 0.54030231, -0.41614684, -0.9899925 ],
       [-0.65364362,  0.28366219,  0.96017029],
       [ 0.75390225, -0.14550003, -0.91113026]])
>>> np.round(_) #四舍五入
array([[ 1., -0., -1.],
       [-1.,  0.,  1.],
       [ 1., -0., -1.]])
>>> g=np.random.rand(10)
>>> g=g*10
>>> g
array([4.01995447, 6.89717975, 0.2562274 , 0.63820007, 1.81621247,
       7.29489334, 2.74258038, 8.70966967, 9.32080087, 2.34143927])
>>> np.floor(g) #向下取整
array([4., 6., 0., 0., 1., 7., 2., 8., 9., 2.])
>>> np.ceil(g) #向上取整
array([ 5.,  7.,  1.,  1.,  2.,  8.,  3.,  9., 10.,  3.])

对矩阵进行运算

>>> import numpy as np
>>> x=np.arange(0,10).reshape(2,5)
>>> x
array([[0, 1, 2, 3, 4],
       [5, 6, 7, 8, 9]])
  • 通过reshape()函数实现数组变形 ,2行5列
>>> import numpy as np
>>> x=np.arange(0,10).reshape(2,5)
>>> x
array([[0, 1, 2, 3, 4],
       [5, 6, 7, 8, 9]])
>>> np.sum(x) #所有元素求和
45
>>> np.sum(x,axis=0) #纵向求和
array([ 5,  7,  9, 11, 13])
>>> np.sum(x,axis=1) #横向求和
array([10, 35])
>>> np.mean(x,axis=0) #纵向计算算术平均值
array([2.5, 3.5, 4.5, 5.5, 6.5])
>>> weight=[0.3,0.7] #权重
>>> np.average(x,axis=0,weights=weight) #纵向计算加权平均值
array([3.5, 4.5, 5.5, 6.5, 7.5])
>>> np.max(x) #元素最大值
9
>>> np.max(x,axis=0) #每列元素最大值
array([5, 6, 7, 8, 9])
>>> 
>>> y=np.random.randint(0,10,size=(3,3))
>>> y
array([[0, 1, 8],
       [3, 2, 8],
       [4, 3, 9]])
>>> np.std(y) #所有元素标准差
3.119037521692933
>>> np.std(y,axis=1) #每行元素的标准差
array([3.55902608, 2.62466929, 2.62466929])
>>> np.sort(y,axis=0) #纵向排列
array([[0, 1, 8],
       [3, 2, 8],
       [4, 3, 9]])
>>> np.sort(y,axis=1) #横向排列
array([[0, 1, 8],
       [2, 3, 8],
       [3, 4, 9]])
>>>np.var(y,axis=0) #每列元素的标准差
array([2.88888889, 0.66666667, 0.22222222]) 

改变数组大小

>>> a=np.arange(1,11,1)
>>> a
array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10])
>>> a.shape=2,5 #改为2行5列
>>> a
array([[ 1,  2,  3,  4,  5],
       [ 6,  7,  8,  9, 10]])
>>> a.shape=5,-1  #-1表示自动计算
>>> a
array([[ 1,  2],
       [ 3,  4],
       [ 5,  6],
       [ 7,  8],
       [ 9, 10]])
>>> b=a.reshape(2,5) #reshape()方法返回新数组
>>> b
array([[ 1,  2,  3,  4,  5],
       [ 6,  7,  8,  9, 10]])

切片操作

c=np.arange(10)
>>> c
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
>>> c[::-1] #反向切片
array([9, 8, 7, 6, 5, 4, 3, 2, 1, 0])
>>> c[::2] #隔一个取一个元素
array([0, 2, 4, 6, 8])
>>> c[:5] #前5个元素
array([0, 1, 2, 3, 4])
>>> b=np.arange(25) #创建数组
>>> b.shape=5,5 #修改数组大小
>>> b
array([[ 0,  1,  2,  3,  4],
       [ 5,  6,  7,  8,  9],
       [10, 11, 12, 13, 14],
       [15, 16, 17, 18, 19],
       [20, 21, 22, 23, 24]])
>>> b[0,2:5] #第0行中小标[2,5)之间的元素值
array([2, 3, 4])
>>> b[1] #第0行所有元素值
array([5, 6, 7, 8, 9])
>>> b[2:5,2:5] #行下标和列下标都介于[2,5)之间的元素值
array([[12, 13, 14],
       [17, 18, 19],
       [22, 23, 24]])
>>> 

布尔运算

>>> import numpy as np
>>> x=np.random.rand(10)
>>> x
array([0.30704693, 0.31142912, 0.87764599, 0.43378632, 0.60016321,
       0.55398328, 0.52452998, 0.02471551, 0.56248843, 0.30698853])
>>> x>0.5
array([False, False,  True, False,  True,  True,  True, False,  True,
       False])
>>> x[x>0.5] #获取数组中大于0.5的元素
array([0.87764599, 0.60016321, 0.55398328, 0.52452998, 0.56248843])
>>> 

广播

>>> a=np.arange(0,60,10).reshape(-1,1) #列向量
>>> b=np.arange(0,6) #行向量
>>> a
array([[ 0],
       [10],
       [20],
       [30],
       [40],
       [50]])
>>> b
array([0, 1, 2, 3, 4, 5])
>>> a+b
array([[ 0,  1,  2,  3,  4,  5],
       [10, 11, 12, 13, 14, 15],
       [20, 21, 22, 23, 24, 25],
       [30, 31, 32, 33, 34, 35],
       [40, 41, 42, 43, 44, 45],
       [50, 51, 52, 53, 54, 55]])
>>> a*b
array([[  0,   0,   0,   0,   0,   0],
       [  0,  10,  20,  30,  40,  50],
       [  0,  20,  40,  60,  80, 100],
       [  0,  30,  60,  90, 120, 150],
       [  0,  40,  80, 120, 160, 200],
       [  0,  50, 100, 150, 200, 250]])

分段函数

       [  0,  50, 100, 150, 200, 250]])
>>> y=np.random.randint(0,10,size=(1,10))
>>> y
array([[9, 3, 4, 3, 8, 6, 7, 5, 0, 2]])
>>> np.where(y<5,0,1) #小于5的元素对应0,其他对应1
array([[1, 0, 0, 0, 1, 1, 1, 1, 0, 0]])
>>>np.piecewise(y,[y<4,y>7],[lambda y:y*2,lambda y:y*3]) #小于4的元素乘以2,大于7的预算乘以3,其他元素变为0
array([[27,  6,  0,  6, 24,  0,  0,  0,  0,  4]])

计算唯一值以及出现次数

>>> import numpy as np
>>> x=np.random.randint(0,10,7)
>>> x
array([3, 7, 5, 2, 8, 1, 6])
>>> np.bincount(x) #元素出现的次数,0表示出现1次
array([0, 1, 1, 1, 0, 1, 1, 1, 1], dtype=int64)
>>> np.sum(_) #所有元素出现次数之和等于数组长度
7
>>> len(x) 
7

矩阵运算

>>> a_list=[3,5,7]
>>> a_mat=np.matrix(a_list) #创建矩阵
>>> a_mat
matrix([[3, 5, 7]]) #矩阵转置
>>> a_mat.T
matrix([[3],
        [5],
        [7]])
>>> a_mat.shape #矩阵形状
(1, 3)
>>> a_mat.size
3
>>> b_mat=np.matrix((1,2,3))
>>> b_mat
matrix([[1, 2, 3]])
>>> a_mat*b_mat.T #矩阵相乘
matrix([[34]])
>>> a_mat.mean() #元素平均值
5.0
>>> a_mat.sum()
15
>>> a_mat.max()
7
>>> c_mat=np.matrix([[1,5,3],[2,9,6]]) #创建二维矩阵
>>> c_mat
matrix([[1, 5, 3],
        [2, 9, 6]])
>>> c_mat.argsort(axis=0) #纵向排序后的元素后的元素序号
matrix([[0, 0, 0],
        [1, 1, 1]], dtype=int64)
>>> c_mat.argsort(axis=1) #横向排序后的元素符号
matrix([[0, 2, 1],
        [0, 2, 1]], dtype=int64)
>>> d_mat=np.matrix([[1,2,3],[4,5,6],[7,8,9]])
>>> d_mat.diagonal() #矩阵的对角线元素
matrix([[1, 5, 9]])
>>> d_mat.flatten() #矩阵平铺
matrix([[1, 2, 3, 4, 5, 6, 7, 8, 9]])
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值