0


28 Python的numpy模块

概述

  1. 在上一节,我们介绍了Pythonrequests模块,包括:发送POST请求、发送GET请求、设置请求头、会话管理等内容。在这一节,我们将介绍Pythonnumpy模块。numpy模块是Python的一个非常重要的科学计算库,它提供了多维数组对象,以及一系列操作这些数组的函数。numpy还是许多科学计算库的基础,比如:SciPyPandasMatplotlib等。

多维数组

  1. numpy的核心功能是多维数组对象ndarray,它是一个快速、灵活的大型数据容器,可以存储单一数据类型的元素。ndarray是同质的,即:所有元素都是相同的类型,并且可以通过索引访问。多维数组可以表示一维、二维、三维甚至更高维的数据,每个维度可以有不同的长度。
  2. 可以使用numpy.array()函数从列表或元组创建多维数组,或使用numpy.zeros()、numpy.ones()等函数创建具有指定形状和类型的多维数组。
  1. import numpy as np
  2. # 从列表创建多维数组
  3. a = np.array([[1, 2, 3], [66, 77, 88]])
  4. # 输出:[[ 1 2 3] [66 77 88]]
  5. print(a)
  6. # 创建全部为0的多维数组
  7. b = np.zeros((2, 3))
  8. # 输出:[[0. 0. 0.] [0. 0. 0.]]
  9. print(b)
  10. # 创建全部为1的多维数组
  11. c = np.ones((2, 4), dtype = np.int32)
  12. # 输出:[[1 1 1 1] [1 1 1 1]]
  13. print(c)
  1. 还可以使用numpy.arange()函数生成一个等差数列,类似于Python中的range()函数。该函数的语法格式为:
  2. numpy.arange(start, stop, step, dtype)
  3. 其各个参数的含义如下。
  4. start:起始值。
  5. stop:终止值,生成的数列中最大的元素值,不包括该值。
  6. step:步长,两个连续元素之间的差值。
  7. dtype:指定生成的数组的数据类型。
  1. import numpy as np
  2. # 生成从0到5的整数数组
  3. a = np.arange(6)
  4. # 输出:[0 1 2 3 4 5]
  5. print(a)
  6. # 生成从1开始,每次增加3,直到13的整数数组
  7. b = np.arange(1, 13, 3)
  8. # 输出:[ 1 4 7 10]
  9. print(b)
  10. # 生成从0开始,每次增加0.2,直到1的浮点数数组
  11. c = np.arange(0, 1, 0.2)
  12. # 输出:[0. 0.2 0.4 0.6 0.8]
  13. print(c)

数组索引

  1. numpy模块中,可以使用方括号和逗号分隔的索引来访问多维数组中的元素。索引主要分为四种类型,分别为:整数索引、切片索引、布尔索引和花式索引。
  2. 整数索引:使用整数索引可以访问多维数组中的特定元素。比如:对于一个二维数组aa[0, 0]将访问第一行第一列的元素。
  1. import numpy as np
  2. a = np.array([[1, 2, 3], [66, 77, 88]])
  3. # 访问第一行第一列的元素,输出:1
  4. print(a[0, 0])
  5. # 访问第二行第三列的元素,输出:88
  6. print(a[1, 2])
  1. 切片索引:使用切片索引可以访问多维数组中的一部分元素。比如:对于一个二维数组aa[0, :]将访问第一行的所有元素。
  1. import numpy as np
  2. a = np.array([[1, 2, 3], [66, 77, 88]])
  3. # 访问第二行的所有元素,输出:[66 77 88]
  4. print(a[1, :])
  1. 布尔索引:使用布尔索引可以根据条件选择多维数组中的某些元素。比如 :对于一个二维数组aa[a > 5]将选择所有大于5的元素。
  1. import numpy as np
  2. a = np.array([[1, 2, 3], [66, 77, 88]])
  3. # 访问大于2的所有元素,输出:[ 3 66 77 88]
  4. print(a[a > 2])
  1. 花式索引:使用花式索引可以根据指定的索引数组选择多维数组中的元素。比如:对于一个二维数组aa[[0, 1], [0, 2]]将选择第一行第一列和第二行第三列的元素(第一个中括号里为元素行号,第二个中括号里为元素列号,两个括号里的元素个数必须相同)。
  1. import numpy as np
  2. a = np.array([[1, 2, 3], [66, 77, 88]])
  3. # 输出:[ 1 88 77]
  4. print(a[[0, 1, 1], [0, 2, 1]])

数组操作

  1. numpy模块提供了大量的数组操作函数,比如:numpy.shapenumpy.reshape()、numpy.transpose()等,可以很方便地进行数组形状的改变、转置等操作。
  2. numpy.shape属性可用于获取多维数组的形状,numpy.reshape()函数可用于改变多维数组的形状,numpy.size属性可用于获取多维数组中元素的个数。
  1. import numpy as np
  2. a = np.array([[1, 2, 3], [66, 77, 88]])
  3. # 输出:(2, 3)
  4. print(a.shape)
  5. # 输出:6
  6. print(a.size)
  7. b = a.reshape(3, 2)
  8. # 输出:[[ 1 2] [ 3 66] [77 88]]
  9. print(b)
  10. # 输出:6
  11. print(b.size)
  1. numpy.append()和numpy.insert()函数可用于在数组中添加元素,numpy.delete()函数可用于从数组中删除元素,numpy.where()函数可用于返回满足指定条件的元素的索引。
  1. import numpy as np
  2. arr = np.array([1, 2, 3])
  3. new_arr = np.append(arr, 100)
  4. # 在尾部添加数据,输出:[ 1 2 3 100]
  5. print(new_arr)
  6. new_arr = np.insert(arr, 1, 100)
  7. # 在指定位置插入数据,输出:[ 1 100 2 3]
  8. print(new_arr)
  9. arr = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
  10. # axis默认为None,会将数组展平到一维,并删除第二个元素,输出:[1 3 4 5 6 7 8 9]
  11. new_arr = np.delete(arr, 1)
  12. print(new_arr)
  13. # 删除第二行,输出:[[1 2 3] [7 8 9]]
  14. new_arr = np.delete(arr, 1, axis = 0)
  15. print(new_arr)
  16. # 删除第二列,输出:[[1 3] [4 6] [7 9]]
  17. new_arr = np.delete(arr, 1, axis = 1)
  18. print(new_arr)
  19. arr = np.array([10, 20, 30, 40, 50])
  20. indexes = np.where(arr > 20)
  21. # 返回满足条件的索引,输出:(array([2, 3, 4], dtype=int64),)
  22. print(indexes)
  23. new_arr = np.where(arr > 20, 0, arr)
  24. # 将满足条件的元素替换为0,不满足的元素保持不变,输出:[10 20 0 0 0]
  25. print(new_arr)
  1. numpy.sort()函数可用于对数组进行排序,numpy.concatenate()函数可用于连接多个数组。
  1. import numpy as np
  2. arr = np.array([3, 1, 4, 1, 5, 9, 2, 6])
  3. new_arr = np.sort(arr)
  4. # 默认升序排列,输出:[1 1 2 3 4 5 6 9]
  5. print(new_arr)
  6. arr = np.array([[9, 8, 7], [6, 5, 4], [3, 2, 1]])
  7. new_arr = np.sort(arr, axis = 0)
  8. # 输出:[[3 2 1] [6 5 4] [9 8 7]]
  9. print(new_arr)
  10. new_arr = np.sort(arr, axis = 1)
  11. # 输出:[[7 8 9] [4 5 6] [1 2 3]]
  12. print(new_arr)
  13. arr1 = np.array([1, 2, 3])
  14. arr2 = np.array([4, 5, 6])
  15. new_arr = np.concatenate((arr1, arr2))
  16. # 合并数组,输出:[1 2 3 4 5 6]
  17. print(new_arr)
  1. numpy.split(array, indices_or_sections, axis=0)函数可将数组按照指定位置或数量分割成多个子数组。indices_or_sections参数为一个整数或一个表示要分割的子数组数量的元组。如果它是一个整数,则表示将数组分割成相等大小的子数组(除了最后一个可能较小)。如果它是一个元组,则表示每个子数组的大小。例如,如果输入 (3, 2, 1),则表示第一个子数组大小为3,第二个子数组大小为2,第三个子数组大小为1
  1. import numpy as np
  2. array = np.arange(6)
  3. # 将数组分割成3个子数组,每个子数组大小相等,输出如下:
  4. # Array 1: [0 1]
  5. # Array 2: [2 3]
  6. # Array 3: [4 5]
  7. subarrays = np.split(array, 3)
  8. for i, subarray in enumerate(subarrays):
  9. print(f"Array {i+1}:", subarray)
  10. # 将数组分割成2个子数组,第一个子数组包含2个元素,输出如下:
  11. # Array 1: [0 1]
  12. # Array 2: [2 3 4 5]
  13. indices = (2, )
  14. subarrays = np.split(array, indices)
  15. for i, subarray in enumerate(subarrays):
  16. print(f"Array {i+1}:", subarray)

数学函数

  1. 数学函数:numpy提供了大量的数学函数,可以对数组中的元素进行各种数学运算,如numpy.sin()、numpy.cos()、numpy.exp()等。
  1. import numpy as np
  2. # 计算60度的余弦值
  3. angle = np.array([60])
  4. cos_value = np.cos(angle * np.pi / 180)
  5. # 输出:[0.5]
  6. print(cos_value)
  7. sequence = np.array([0, 30, 45, 60, 90])
  8. sin_sequence = np.sin(sequence * np.pi / 180)
  9. # 输出:[0. 0.5 0.70710678 0.8660254 1. ]
  10. print(sin_sequence)

线性代数

  1. 线性代数:numpy还提供了一些线性代数函数,如numpy.dot()、numpy.linalg.inv()等,可以方便地进行矩阵的点积、逆矩阵等计算。
  1. import numpy as np
  2. a = np.array([1, 2, 3])
  3. b = np.array([4, 5, 6])
  4. result = np.dot(a, b)
  5. # 计算点积,输出:32
  6. print(result)
  7. a = np.array([[1, 2], [3, 4]])
  8. b = np.array([[5, 6], [7, 8]])
  9. result = np.dot(a, b)
  10. # 计算二维数组的点积,输出:[[19 22] [43 50]]
  11. print(result)

随机数生成

  1. 随机数生成:numpy包含了大量的随机数生成函数,可以方便地生成各种分布的随机数。
  1. import numpy as np
  2. random_float = np.random.rand()
  3. # 生成[0, 1)范围内的随机浮点数,输出:0.58806166392493
  4. print(random_float)
  5. random_integer = np.random.randint(0, 10)
  6. # 生成[0, 10)范围内的随机整数,输出:9
  7. print(random_integer)
  8. random_array = np.random.rand(3)
  9. # 生成长度为3的随机浮点数数组,数组中的数在[0, 1)范围内,输出:[0.90723285 0.05028758 0.13100614]
  10. print(random_array)
  11. random_array = np.random.randint(0, 100, size = 3)
  12. # 生成长度为3的随机整数数组,数组中的数在[0, 100)范围内,输出:[59 43 90]
  13. print(random_array)
标签: python numpy

本文转载自: https://blog.csdn.net/hope_wisdom/article/details/133846489
版权归原作者 hope_wisdom 所有, 如有侵权,请联系我们删除。

“28 Python的numpy模块”的评论:

还没有评论