Python学习笔记#6:numpy的使用

Numpy 概念

NumPy(Numerical Python) 是 Python 语言的一个扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。

NumPy 的前身 Numeric 最早是由 Jim Hugunin 与其它协作者共同开发,2005 年,Travis Oliphant 在 Numeric 中结合了另一个同性质的程序库 Numarray 的特色,并加入了其它扩展而开发了 NumPy。NumPy 为开放源代码并且由许多协作者共同维护开发。

NumPy 是一个运行速度非常快的数学库,主要用于数组计算,包含:

  • 一个强大的N维数组对象 ndarray
  • 广播功能函数
  • 整合 C/C++/Fortran 代码的工具
  • 线性代数、傅里叶变换、随机数生成等功能

安装

pip install numpy -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com

导入包

import numpy as np

数据创建

1. 随机数

在numpy中,随机函数是一个很大的类,我们会经常使用随机函数初始化数据模型。

numpy.random.normal()

numpy.random.normal(loc=0,scale=1e-2,size=shape)

  • 参数loc(float):正态分布的均值,对应着这个分布的中心。loc=0说明这一个以Y轴为对称轴的正态分布,
  • 参数scale(float):正态分布的标准差,对应分布的宽度,scale越大,正态分布的曲线越矮胖,scale越小,曲线越高瘦。
  • 参数size(int 或者整数元组):输出的值赋在shape里,默认为None。
>>> np.random.normal(loc = 0, scale = 1, size = (2, 3))
array([[ 1.1253141 , -0.35899555,  1.2206081 ],
       [-1.33949555,  0.42837337, -0.12346315]])

numpy.random.rand()

numpy.random.rand(d0,d1,…,dn)

  • rand函数根据给定维度生成[0,1)之间的数据,包含0,不包含1
  • dn表格每个维度
  • 返回值为指定维度的array
>>> np.random.rand()
0.5741992576511386

>>> np.random.rand(4)
array([0.46293136, 0.67650639, 0.4965211 , 0.41193224])

>>> np.random.rand(3,4)
array([[0.5874274 , 0.74255452, 0.532332  , 0.20922426],
       [0.60061671, 0.57630622, 0.5325137 , 0.42761424],
       [0.75694314, 0.04299292, 0.86352272, 0.0804793 ]])
       
>>> np.random.rand(2,3,4)
array([[[0.4610567 , 0.62417219, 0.42756664, 0.96705009],
        [0.21420153, 0.78014512, 0.86688418, 0.49624361],
        [0.69868323, 0.05157287, 0.75464171, 0.3637569 ]],

       [[0.37934486, 0.2571473 , 0.56984629, 0.55191529],
        [0.98903933, 0.7968863 , 0.78496612, 0.49052729],
        [0.53844221, 0.91275757, 0.89148343, 0.78016788]]])

numpy.random.randn()

numpy.random.randn(d0,d1,…,dn)

  • randn函数返回一个或一组样本,具有标准正态分布。
  • dn表格每个维度
  • 返回值为指定维度的array
>>> numpy.random.randn()
0.8538518153827508

>>> numpy.random.randn(4)
array([ 0.18676025, -0.96798301, -1.55092326,  0.15827384])

>>> numpy.random.randn(3,4)
array([[ 0.46254689, -0.76170678,  0.83751158, -1.09405029],
       [ 0.23794122,  0.75556361, -0.98164949,  2.35257227],
       [ 0.52405716,  0.49690142,  0.02190174,  0.52204988]])
       
>>> numpy.random.randn(2,3,4)
array([[[ 1.53811637,  1.03104813, -0.07696404, -0.48572504],
        [ 0.15683787, -1.23805156,  2.75345817,  1.14479291],
        [ 1.77812274,  1.56753809,  0.6222866 , -0.04480746]],

       [[ 0.23821553, -2.22083911,  0.13508668, -1.3745254 ],
        [ 0.83610244,  0.08711017,  1.46519802, -0.65621799],

numpy.random.randint()

numpy.random.randint(low, high=None, size=None, dtype=‘I’)

  • 返回随机整数,范围区间为[low,high),包含low,不包含high
  • 参数:low为最小值,high为最大值,size为数组维度大小,dtype为数据类型,默认的数据类型是np.int
  • high没有填写时,默认生成随机数的范围是[0,low)
>>> np.random.randint(1, 5)
2

>>> np.random.randint(1, 5, size=(2))
array([3, 1])

>>> np.random.randint(1, 5, size=(4))
array([4, 4, 4, 2])

>>> np.random.randint(1, 5, size=(3,4))
array([[2, 1, 1, 3],
       [4, 3, 3, 2],
       [1, 1, 1, 4]])
       
>>> np.random.randint(1, 5, size=(2,3,4))
array([[[2, 1, 4, 1],
        [4, 3, 3, 3],
        [1, 3, 2, 2]],

       [[2, 2, 1, 2],
        [3, 2, 4, 3],
        [2, 2, 3, 3]]])

2. 矩阵

使用numpy,可以非常方便的对矩阵进行各种运算。
随机矩阵可以使用随机函数创建,而一些特殊矩阵也可以是用特定的函数

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

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

# 单位矩阵
>>> np.identity(6)
array([[1., 0., 0., 0., 0., 0.],
       [0., 1., 0., 0., 0., 0.],
       [0., 0., 1., 0., 0., 0.],
       [0., 0., 0., 1., 0., 0.],
       [0., 0., 0., 0., 1., 0.],
       [0., 0., 0., 0., 0., 1.]])

# 对角矩阵
>>> np.diag(np.random.randint(1, 10, size = 6))
array([[6, 0, 0, 0, 0, 0],
       [0, 3, 0, 0, 0, 0],
       [0, 0, 5, 0, 0, 0],
       [0, 0, 0, 8, 0, 0],
       [0, 0, 0, 0, 7, 0],
       [0, 0, 0, 0, 0, 9]])


# 重塑
>>> np.arange(1, 10)
array([1, 2, 3, 4, 5, 6, 7, 8, 9])

>>> np.arange(1, 10).reshape(3,-1)
array([[1, 2, 3],
       [4, 5, 6],
       [7, 8, 9]])

>>> np.arange(40).reshape(-1,10)
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, 25, 26, 27, 28, 29],
       [30, 31, 32, 33, 34, 35, 36, 37, 38, 39]])

3. 创建副本

>>> ar = np.random.randint(1,100,size=(10,10))
>>> ar
array([[37, 62, 79, 43, 71, 92, 86, 59, 26, 22],
       [73, 97, 35, 70, 48, 82, 57, 42, 89, 79],
       [40, 29, 76, 64, 15, 26, 44, 57,  8, 89],
       [64, 40,  4, 32, 87, 96, 42, 32, 70, 33],
       [17, 56, 37, 55,  9, 50, 63,  6, 79, 97],
       [14, 97, 77, 49, 94,  4, 87, 22, 52, 13],
       [47, 25, 33, 59, 93, 96, 94, 77, 47, 12],
       [ 7, 93,  8, 94, 40, 38, 51,  7, 76, 70],
       [19, 69, 44, 87, 60, 18, 17, 26, 91, 53],
       [40, 59, 50, 53, 77, 58, 47, 17, 48, 38]])
>>> ab = ar.copy()
>>> ab
array([[37, 62, 79, 43, 71, 92, 86, 59, 26, 22],
       [73, 97, 35, 70, 48, 82, 57, 42, 89, 79],
       [40, 29, 76, 64, 15, 26, 44, 57,  8, 89],
       [64, 40,  4, 32, 87, 96, 42, 32, 70, 33],
       [17, 56, 37, 55,  9, 50, 63,  6, 79, 97],
       [14, 97, 77, 49, 94,  4, 87, 22, 52, 13],
       [47, 25, 33, 59, 93, 96, 94, 77, 47, 12],
       [ 7, 93,  8, 94, 40, 38, 51,  7, 76, 70],
       [19, 69, 44, 87, 60, 18, 17, 26, 91, 53],
       [40, 59, 50, 53, 77, 58, 47, 17, 48, 38]])

数据转换

1. list 转换 numpy

>>> a = [i for i in range(1, 15)]
>>> ar = np.array(a)
>>> a
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
>>> ar
array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14])

2. DataFrame 转换 numpy

>>> df = pd.DataFrame({
   'A': [1, 2, 3], 'B': [4, 5, 6], 'C': [7, 8, 9]})
>>> df
   A  B  C
0  1  4  7
1  2  5  8
2  3  6  9
>>> df.values
array([[1, 4, 7],
       [2, 5, 8],
       [3, 6, 9]], dtype=int64)

数据抽样

1. 随机抽样

numpy.random.choice()

numpy.random.choice(a, size=None, replace=True, p=None)

  • 从给定的一维数组中生成随机数
  • 参数:
  • a为一维数组类似数据或整数;size为数组维度;p为数组中的数据出现的概率
  • a为整数时,对应的一维数组为np.arange(a)
# 当replace为False时,生成的随机数不能有重复的数值
>>> np.random.choice(5, size = 5, replace=False)
array([0, 1, 3, 4, 2])

# 从[10,...,19]当中随机选取数字,再组成(3,4)的矩阵。
>>> np.random.choice([i for i in range(10, 20)], size=(3, 4))
array([[14, 13, 10, 14],
       [12, 16, 15, 11],
       [19, 10, 12, 19]])

# 从[10,...,19]当中随机选取数字,再组成(3,4)的矩阵,然后重塑为(6,2)的矩阵
>>> np.random.choice([i for i in range(10, 20)], size=(3, 4)).reshape(6,-1)
array([[11, 19],
       [11, 10],
       [17, 18],
       [14, 18],
       [18, 18],
       [17, 15]])

2. 概率抽样

# 按照概率筛选数值
>>> np.random.choice(5, size=3, p=[0.2, 0.3, 0.1, 0.2, 0.2])
array([3, 1, 1])

numpy.random.seed()

numpy.random.seed()

  • np.random.seed()的作用:使得随机数据可预测。
  • 当我们设置相同的seed,每次生成的随机数相同。如果不设置seed,则每次会生成不同的随机数
# seed = 0
>>> np.random.seed(0)
>>> np.random.rand(5)
array([0.5488135 , 0.71518937, 0.60276338, 0.54488318, 0.4236548 ])

# seed 随机改变,随机结果改变
>>> np.random.rand(5)
array([0.64589411, 0.43758721, 0.891773  , 0.96366276, 0.38344152])

# seed = 22,结果与 seed = 0 不同
>>> np.random.seed(22)
>>> np.random.rand(5)
array([0.20846054, 0.48168106, 0.42053804, 0.859182  , 0.17116155])

# seed = 0,结果和第一次相同
>>> np.random.seed(0)
>>> np.random.rand(5)
array([0.5488135 , 0.71518937, 0.60276338, 0.54488318, 0.4236548 ])

数据查找&筛选

1. 去重

np.unique()

>>> ar = np.random.randint(1, 100, size=100)
>>> ar
array([87, 89, 80, 91, 11,  8, 20, 84, 11, 68, 83,  5, 15, 16, 83, 72, 63,
       71, 11, 57, 95,  2, 59, 39, 96, 51, 81, 74, 40, 76, 57, 47, 39, 14,
       80, 57, 52, 82, 31, 33, 99, 85, 31, 47, 29, 27,  4, 37, 51, 80,  6,
        6,  6, 67, 58, 36, 25, 80, 89, 61
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值