• numpy详解


    Numpy

    简介
    Numpy(Numerical Python)是一个在Python领域做数值计算非常重要的库,
    Pandas、Matplotlib、Statmodels、Scikit-learn和其它一些科学计算库都依赖Numpy
    也就是说有时候你可能没有直接import numpy as np,但是却在背后有用到它

    Numpy数组对比Python对象更节省空间、速度更快

    1. print(sys.getsizeof(1))  # python中一个整数 28
    2. print(np.dtype(int).itemsize)  # Numpy特别小 4


     性能也很重要

    1. start_time = time.time()
    2. a = np.arange(100000)
    3. np.sum(a ** 2)
    4. end_time = time.time()
    5. print(end_time - start_time)  # 0.0014064311981201172



    安装

    pip install numpy



    引入

    import numpy as np

    创建

    一维数组

    1. a = np.array([1, 2, 3, 4])
    2. print(a[0])  # 取出单个元素 1
    3. print(a[[0, -1]]) # 取出多个元素 [1 4]
    4. print(a[[True, False, False, True]])# 利用布尔取出多个元素 [1 4]
    5. print(a[1:4])  # 类似列表的切片操作[2 3 4]



    多维数组

    1. a = np.array([[1, 2, 3], [4, 5, 6]])
    2. print(a.shape)  # 形状 (2, 3)
    3. print(a.ndim)  # 行数 2
    4. print(a.size)  # 大小 6
    5. print(a[1])  # 获取元素 [4 5 6]
    6. print(a[0:2])  # 切片       


            

    数据类型

    查看数据类型

    1. print(np.array([1, 2, 3, 4]).dtype)  # int32
    2. print(np.array([0, .5, 1, 1.5, 2]).dtype)  # float64
    3. print(np.array(['a', 'b', 'c']).dtype)  #
    4. <U1【表示Unicode】,1代表最大一个字符
    5. print(np.array(['adwadawd', 'b', 'c']).dtype)  #
    6. <U8【表示Unicode】
    7. print(np.array([{'name': 'jkw'}, .5, 1, 1.5, 2]).dtype)  # object



    查看数据类型所占内存大小

    1. print(np.dtype(np.int8).itemsize)  # 1
    2. print(np.dtype(np.int32).itemsize)  # 4



    指定数据类型

    1. np.array([1, 2, 3, 4], dtype=float)
    2. np.array([1, 2, 3, 4], dtype=np.int8)
    3.         

    特性

    广播机制

    1. a = np.arange(4)
    2. print(a)  # [1 2 3 4]
    3. print(a + 10)  # 广播操作 [10 11 12 13]
    4. print(a * 10)  # 广播操作 [ 0 10 20 30]
    5. b = np.array([10, 10, 10, 10])
    6. print(a + b)  # 对应位置进行计算 [10 11 12 13]



    布尔数组的用处

    1. a = np.array([1, 2, 3, 4])
    2. print(a[[True, False, False, True]])# 利用布尔取出多个元素 [1 4]
    3. print(a > 2)  # 判断会返回布尔数组【若满足条件只有一个,那么直接会返回元素】 [False False  True  True]



    运算符的使用

    1. a = np.array([1, 2, 3, 4])
    2. print(a[~(a > 2)])  # ~ 是not的意思 [1 2]
    3. print(a[(a == 0) | (a == 1)])  # |是or的意思 [1]
    4. print(a[(a <= 2) & (a % 2 == 0)])  # &and的意思  [2]


            

    方法

    arange
    语法格式为:range([start,] end [,step])
    start:表示起始数字【可选,默认是0】
    end:  结尾数字
    step:  步长【可选,默认是1】

    1. np.arange(10)
    2. np.arange(5, 10)
    3. np.arange(0, 1, .1)



    数学函数

    1. a = np.array([1, 2, 3, 4])
    2. print(a.mean())  # 求平均值 2.5
    3. x = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
    4. print(np.sin(x))
    5. print(np.cos(x))
    6. print(np.exp(x))
    7. print(np.log(x))
    8. print(np.sqrt(x))



    随机数

    1. # 参数可以使单个生成一维数组,也可以是2个,生成二维数组
    2. print(np.random.random(size=2))  # 【0~1,可以取0】随机浮点数 [0.75730215 0.24639044]
    3. print(np.random.normal(size=2))  # 标准正态分布取值【均值为0,方差为1】 [-1.39069266  0.25014434]
    4. print(np.random.randint(50, 100, size=2))  # 在50-100 取值 [ 2 50]
    5. print(np.random.rand(2, 4))  # 根据均匀分布取值
    6. '''
    7. [[0.75064719 0.72179169 0.85748488 0.92259082]
    8. [0.46155837 0.83502102 0.10128444 0.27298604]]
    9. '''



    改变矩阵形状【扩维】

    1. print(np.arange(10).reshape(2, 5))  # 改变形状 从一维变二维
    2. '''[[0 1 2 3 4]
    3. [5 6 7 8 9]]'''
    4. print(np.arange(10).reshape((5, 2, 1)))  # 改变形状 从一维变三维


    改变矩阵形状【缩维】

    print(np.arange(10).reshape(2, 5).flatten())  # [0 1 2 3 4 5 6 7 8 9]



    linspace

    1. print(np.linspace(0, 1, 5))  # 0-1之间均匀取五个数 [0.   0.25 0.5  0.75 1.  ]
    2. print(np.linspace(0, 1, 5, False))  # 0-1之间均匀取五个数,不包括末尾数



    zeros, ones, empty

    1. print(np.zeros(5))  # [0. 0. 0. 0. 0.]
    2. print(np.zeros((3), dtype=np.int8))  # [0 0 0]
    3. np.zeros((3,3))
    4. print(np.ones(5)) # [1. 1. 1. 1. 1.]
    5. print(np.ones((5), dtype=np.int8))  # [1 1 1 1 1]
    6. np.ones((3,3))
    7. print(np.empty(5))  # 仅仅开辟空间,里面数据不固定
    8. np.empty((2,2))



    identity, eye

    1. print(np.identity(3))
    2. print(np.eye(3, 3))
    3. '''[[1. 0. 0.]
    4. [0. 1. 0.]
    5. [0. 0. 1.]]'''
    6. np.eye(8,4)
    7. np.eye(8,4,k=1)
    8. np.eye(8,4,k=-3)

    数组的整合、切分、追加、插入

    整合

    1. a = np.array([
    2. [1, 2, 3, 7],
    3. [4, 5, 6, 7],
    4. [7, 8, 9, 7]
    5. ])
    6. b = np.array([
    7. [10, 20, 30, 40],
    8. [50, 60, 70, 80],
    9. [70, 80, 10, 20],
    10. ])
    11. c = np.concatenate((a, b))  # 整合
    12. print(c.shape)  # (6, 4)
    13. c2 = np.stack((a, b))  # 整合,创建一个新的维度
    14. print(c2.shape)  # (2, 3, 4)



    切分

    1. a = np.array([[1, 2, 3, 7],[4, 5, 6, 7],[7, 8, 9, 7],[8, 5, 3, 1]])
    2. print(np.split(a, 4))
    3. print(np.split(a, 2))
    4. print(np.hsplit(a, 4))
    5. print(np.hsplit(a, 2))



    追加, 插入

    1. b = [10, 20, 30, 40]
    2. a = np.append(a, b)
    3. a = np.append(a, [b])  # 需要有同样的维度
    4. a = np.append(a, [b], axis=0)  # 还需要选择维度
    5. a = np.insert(a, 1, b, axis=0)  # 另一种做法

  • 相关阅读:
    考研数据结构与算法(七)图论
    甘特图来搞定跨部门协作难的问题!项目经理必备
    关于线程池的常见问题
    【UML】要点
    自用——平衡小车代码
    MTK APP实现动态修改logo和开机动画
    基于C#的GRPC
    【51单片机】LED点阵屏(动画显示CSDN)
    封装自己的jq myFullPage插件
    吴恩达deeplearning.ai:决策树模型
  • 原文地址:https://blog.csdn.net/m0_63040701/article/details/132796278