• Python之三大基本库——Numpy(1)


    最近呢学了一些关于python的一些功能,为了更方便快捷高效的实现项目,我们要熟知python的三个基本库:numpy、pandas、matplotlib的功能。由于我也是入门新手,所以先做一些基本的总结,后续有进阶的话会再来更新。

    一、Numpy的作用

    Numpy是一个Python科学计算库,提供了高性能的多维数组对象(ndarray)以及对这些数组进行操作的函数。它是许多其他数据科学和机器学习库的基础。总而言之,就是可以提高数据计算的库,而后面介绍的pandas、matplotlib也都是基于numpy库的数据基础上进行操作的

    主要作用主要包括:

    1、矩阵运算:numpy提供了各种矩阵运算,如矩阵乘法、转置和分解等,方便进行矩阵运算。同时,NumPy还支持使用多种矩阵运算,如矩阵乘法、矩阵加法、矩阵求逆等,满足不同场景的需求。

    2、存储和处理大型矩阵:numpy是一个开源的数值计算扩展,可以用来存储和处理大型矩阵。它采用了NumPy中的嵌套列表结构,比Python本身的列表结构要高效得多。因此,NumPy可以用来存储和处理大型矩阵,并能够高效地进行矩阵运算。

    3、数组操作:numpy的核心功能是ndarray对象,它是一个多维数组,可以进行快速的数值计算和数组操作。numpy提供了丰富的数组操作函数,如索引、切片、形状变换、数学运算、逻辑运算等。

    4、数值计算:numpy提供了大量的数学函数,包括线性代数、傅里叶变换、随机数生成等。这些函数可以高效地处理大规模数据集,提供了快速、稳定的数值计算能力。

    5、数据处理:numpy可以方便地处理和操作多维数组,可以对数据进行排序、去重、筛选、统计等操作。同时,numpy还提供了对文件的读写功能,可以方便地读取和保存数据。

    6、科学计算:numpy广泛应用于科学计算领域,如物理学、生物学、化学、地理学等。它提供了许多科学计算的工具和函数,可以进行数据分析、建模、模拟等。

    7、计算速度快:numpy库的计算速度非常快,甚至比python内置的简单运算还要快,这使得它成为很多科学计算和数据分析的首选工具。同时,numpy还有很多优点,比如易于扩展、灵活性高、支持多线程等。因此,numpy库在处理速度问题方面具有很大的潜力

    二、numpy的核心对象array

    与python中的一切皆对象不同,在numpy中是一切皆数据

    numpy的核心数据结构,就叫做array就是数组,array对象可以是一维数组,也可以是多维数组。python的list也可以实现相同的功能,但是array比List的优点在于性能好、包含数组元数据信息、大量的便捷函数
    numpy成为事实上的Scipy、Pandas、Scikit-Learn、Tensorflow、PaddlePaddle等框架的“通用底层语言”,numpy的array和python的list的一个区别,是numpy元素必须都是同一种数据类型,比如都是数字int类型,这也是numpy高性能的一个原因

    1. import numpy as np
    2. # 创建一维数组
    3. x1 = np.array([0,1,2,3,4,5,6,7,8,9])
    4. # 创建二维或多维数组
    5. x2 = np.array([
    6. [0,1,2,3,4],
    7. [5,6,7,8,9]
    8. ])

    三、numpy的array的本身属性

    1、shape:返回一个元组,表示array的维度
    2、ndim:一个数字,表示array的维度的数目
    3、size:一个数字,表示array中所有数据元素的数目
    4、dtype:返回array中元素的数据类型

    1. x1.shape # 结果(10,)
    2. x2.shape # 结果(2,5)
    3. x1.ndim # 结果 1
    4. x2.ndim # 结果 2
    5. x1.size # 结果 10
    6. x2.size # 结果 10
    7. x1.dtype # 结果 dtype(int32)
    8. x2.dtype # 结果 dtype(int32)

    四、创建array的方法

    1、从Python的列表List和嵌套列表创建array
    2、使用预定函数arange、ones/ones_like、zeros/zeros_like、empty/empty_like、full/full_like、eye等函数创建
    3、生成随机数的np.random模块构建

    1. # 方法1
    2. list1 = [0,1,2,3,4,5]
    3. x1 = np.array(list1)
    4. list2 = [[0,1,2],[3,4,5]]
    5. x2 = np.array(list2)
    6. # 方法2 使用关键字arange创建数字序列
    7. # arange([start,] stop[, step,], dtype=None)
    8. np.arange(10)
    9. np.arange(2,10,2)
    10. # 方法3 使用ones创建全是1的数组
    11. # np.ones(shape, dtype=None, order='C')shape : int or tuple of ints Shape of the new
    12. # array,e.g.,(2,3)or 2.
    13. np.ones(10)
    14. np.ones((2,3))
    15. # 使用ones_like创建形状相同的数组
    16. # ones_like(shape, dtype=float, order='C')
    17. np.ones_like(x1)
    18. np.ones_like(x2)
    19. # 方法4 使用zeros创建全是0的数组
    20. # np.zeros(shape, dtype=None, order='C')
    21. np.zeros(10)I
    22. np.zeros((2,4))
    23. # 使用zeros_like创建形状相同的数组
    24. # np.zeros_like(a, dtype=None)
    25. np.zeros_like(x1)
    26. np.zeros_like(x2)
    27. # 方法5 使用empty创建全是随机数字的数组
    28. # empty(shape, dtype=float, order='C') 注意:数据是未初始化的,里面的值可能是随机值不要用
    29. np.empty(10)
    30. np.empty((2,4))
    31. # 使用empty_ike创建形状相同的数组empty_like(prototype, dtype=None)
    32. np.empty_like(x)
    33. np.empty_like(X)
    34. # 方法6 使用fuIl创建指定值的数组
    35. # np.full(shape, fill value, dtype=None, order='C')
    36. np.fu11(10,666)
    37. np.full((2,4),333)
    38. # 使用full_like创建形状相同的数组
    39. # np.full_like(a,fill_value, dtype=None)
    40. np.full_like(x,666)
    41. np.full_like(X, 666)
    42. # 方法7 使用random模块生成随机数的数组,里面的参数代表数组维度数
    43. # randn(d0, d1, ..., dn)
    44. np.random. randn ()
    45. np.random. randn (3)
    46. np.random.randn(3,2)
    47. np.random.randn(3,2,4)

    五、array本身支持的大量操作和函数

    1、直接逐元素的加减乘除等算数操作
    2、更好用的面向多维的数组索引
    3、求sum/mean等聚合函数
    4、线性代数函数,比如求解逆矩阵、求解方程组

    1. # 这些操作如果用Python实现需要写很多for循环,用numpy数组很容易
    2. A = np.arange(10)reshape(2,5)
    3. A.shape
    4. # 每个元素分别+1 或 *3
    5. A+1
    6. A*3
    7. # 一些其它函数计算
    8. np.sin(A)
    9. np.exp(A)
    10. # 用于等维度的两个数组之间的每个数据之间的运算
    11. B = np.random.randn(2,5)
    12. A+B
    13. A-B

    六、numpy对数组按照索引查询

    1、基础索引

    针对于一维数组来说,与python中的切片获取方式是一致的,但是对于多维数据就不同

    1. # 分别用行坐标、列坐标,实现行列筛选
    2. # x[0][0]相当于x[0,0]
    3. x[-12]
    4. # 可以省略后续索引值,返回的数据是降低一个维度的数组
    5. # 这里的2,其实是要筛选第2行
    6. x[2]
    7. # 筛选-1对应的行
    8. x[-1]
    9. # 筛选多行
    10. x[:-1]
    11. # 筛选多行,然后筛选多列
    12. x[:22:4]
    13. # 筛选所有行,然后筛选多列
    14. x[:,2]

    注意:切片的修改会修改原来的数组,Numpy不会修改原来的元素

    原因:Numpy经常要处理大数组,避免每次都复制,节省时间和空间 

    2、神奇索引(花式索引)

    用整数数组进行的索引,叫做神奇索引,就是在中括号中传入一个list

    1. # 先后构建一个两行两列的数组,然后用indexs列表传入就可以全部取出来
    2. indexs = np.array([0,2],[1,3])
    3. x[indexs]
    4. 实例:获取数组中最大的前N个数字
    5. # 一维数组:随机生成1到100之间的,10个数字
    6. arr = np.random.randint(l,100,10)
    7. # arr.argsort()会返回排序后的索引index
    8. # 取最大值对应的3个下标
    9. arr.argsort()[-3:]
    10. arr[arr,argsort()[-3:]]
    11. # 多维数组 筛选多列,行不能省略
    12. X = np.arange(20).reshape(4,5)
    13. X[:,[0,2, 3]]
    14. array([[ 0,NN3]5[10,12,13],[15,17,18]])
    15. # 同时指定行列-列表
    16. # 返回的是[(0,1),(2,3),3,4)]位置的数字
    17. X[[0,2,3],[1,3,4]]

    3、布尔索引

    注意:布尔索引选择的数据是数组的拷贝

    1. X = np.arange(20).reshape(4,5)
    2. # X>5的boolean数组,既有行,又有列
    3. X>5
    4. # 如下返回的是(行,列)一维结果
    5. X[X>5]
    6. # 举例:怎样把第3列大于5的行筛选出来
    7. X[:,3]>5
    8. # 下面是筛选出有多少行>5的数据
    9. X[X[:,3]>5] = 666
    10. # 组合查询
    11. # 注意,每个条件都得加小括号
    12. condition = (x%2==0)|(x>7)
    13. X[condition]

     

    内容太长了,我们分两张进行讲解吧,想要找下一篇的小伙伴们,看博主链接或主页寻找。

  • 相关阅读:
    信息技术服务连续性策略
    React源码分析4-深度理解diff算法
    HDFS文件上传之create创建过程-尚硅谷大数据培训
    面试算法-数据结构二
    zookeeper应用之分布式屏障
    appium+华为鸿蒙手机自动化(环境配置)
    动态代理。
    Springboot+基于微信小程序的商城 毕业设计-附源码191145
    python pip
    算法之神奇的斐波那契数列(Fibonacci sequence)
  • 原文地址:https://blog.csdn.net/m0_61746796/article/details/139649265