欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 手游 > (9)探秘NumPy:高性能数值计算的基石

(9)探秘NumPy:高性能数值计算的基石

2024/10/24 10:21:50 来源:https://blog.csdn.net/huanzi833/article/details/140576426  浏览:    关键词:(9)探秘NumPy:高性能数值计算的基石

目录

  • 1. Numpy 是什么?
  • 2. 安装NumPy
  • 3. 创建数组
  • 4. 数组的基本操作
  • 5. 线性代数和统计函数
  • 6. 排序和搜索
    • 6.1 排序(Sorting)
    • 6.2 搜索(Searching)
  • 7. 输入输出
    • 7.1 二进制文件输入输出
    • 7.2 压缩的二进制文件输入输出
    • 7.3 文本文件输入输出

1. Numpy 是什么?

NumPy(Numerical Python)是Python中用于处理大型多维数组和矩阵的数学运算库,并提供了大量用于处理这些数组的高级数学函数。它是许多其他Python库(如SciPy、Pandas和Matplotlib)的基础。

以下是一些NumPy的特性和基本用法:

2. 安装NumPy

使用pip安装NumPy:

pip install numpy

3. 创建数组

  • 使用numpy.array()函数:
import numpy as nparr1 = np.array([1, 2, 3, 4, 5])  # 一维数组
arr2 = np.array([[1, 2], [3, 4], [5, 6]])  # 二维数组(或矩阵)
  • 使用特定的函数创建数组,如numpy.zeros(), numpy.ones(), numpy.full(), numpy.arange(), numpy.linspace(), numpy.random.rand(), numpy.random.randint()等:
zeros_arr = np.zeros((3, 3))  # 创建一个3x3的全零数组
ones_arr = np.ones((2, 3))  # 创建一个2x3的全1数组
rand_arr = np.random.rand(4, 4)  # 创建一个4x4的随机数组,值在[0, 1)之间

4. 数组的基本操作

  • 索引和切片:
print(arr2[0, 1])  # 输出:2
print(arr2[:2, :])  # 输出前两行
  • 形状(shape)和大小(size):
print(arr2.shape)  # 输出:(3, 2)
print(arr2.size)  # 输出:6
  • 数据类型(dtype):
print(arr1.dtype)  # 输出:int64 或其他整数类型
  • 重塑(reshape):
reshaped_arr = arr1.reshape((1, 5))  # 将一维数组转换为1x5的二维数组
  • 数组运算:NumPy支持数组间的元素级运算(如加法、减法、乘法、除法等)。
result = arr1 + arr1  # 对arr1中的每个元素进行加法运算

5. 线性代数和统计函数

NumPy提供了许多用于线性代数(如矩阵乘法、求逆、行列式等)和统计(如均值、中位数、标准差等)的函数。

# 矩阵乘法
result = np.dot(arr2, arr2.T)  # T表示转置# 计算均值
mean_val = np.mean(arr1)

6. 排序和搜索

NumPy在排序和搜索数组元素方面提供了强大的功能。以下是关于NumPy排序和搜索的详细说明:

6.1 排序(Sorting)

  1. numpy.sort()

    • 功能:返回输入数组的排序副本。
    • 参数:
      • a:要排序的数组。
      • axis:沿着哪个轴进行排序(默认为-1,表示最后一个轴)。
      • kind:排序算法的选择(默认为’quicksort’)。
      • order:如果数组包含字段,则是要排序的字段。
    • 示例:
      import numpy as np
      arr = np.array([[3, 2, 4], [5, 0, 1]])
      print(np.sort(arr, axis=0))  # [[3 0 1] [5 2 4]](按列排序)
      print(np.sort(arr, axis=1))  # [[2 3 4] [0 1 5]](按行排序)
      
  2. numpy.argsort()

    • 功能:返回输入数组中元素排序后的索引数组。
    • 参数与numpy.sort()类似。
    • 示例:
      arr = np.array([3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5])
      print(np.argsort(arr))  # [1 7 0 3 9 2 8 4 5 6]
      

6.2 搜索(Searching)

  1. numpy.where()

    • 功能:根据条件返回符合条件的元素的索引。
    • 示例:
      arr = np.array([1, 2, 3, 4, 5, 6])
      print(np.where(arr > 3))  # (array([3, 4, 5]),)
      
  2. numpy.argmax() 和 numpy.argmin()

    • 功能:分别返回数组中最大值和最小值的索引。
    • 示例:
      arr = np.array([[1, 2, 3], [4, 5, 6]])
      print(np.argmax(arr))  # 5(最大值的索引)
      print(np.argmin(arr))  # 0(最小值的索引)
      print(np.argmin(arr, axis=0))  # [0 0 0](每一列最小值的索引)
      
  3. numpy.searchsorted()

    • 功能:在已排序数组中查找元素的插入点,以维持排序。
    • 示例:
      arr = np.array([1, 3, 5, 7, 9])
      print(np.searchsorted(arr, 4))  # 2(4应插入的位置)
      
  4. numpy.nonzero()

    • 功能:返回非零元素的索引。
    • 示例:
      arr = np.array([[1, 0, 0], [0, 2, 0], [3, 0, 4]])
      print(np.nonzero(arr))  # (array([0, 1, 2, 2]), array([0, 1, 0, 2]))
      
  5. numpy.extract()

    • 功能:根据条件从数组中提取元素。注意,此函数可能在某些NumPy版本中不被直接支持,但可以通过布尔索引实现类似功能。

以上就是NumPy在排序和搜索方面的主要功能。这些函数为处理大型数组提供了高效的方法,特别是在数据分析和科学计算中非常有用。

7. 输入输出

NumPy可以轻松地读取和写入文件中的数据,特别是那些以文本或二进制格式存储的大型数组。

NumPy为数据分析和科学计算提供了强大的基础,是Python中数据科学和机器学习领域的重要工具。

NumPy提供了多种用于数据输入输出的函数,这些函数使得用户能够方便地将数据从磁盘加载到NumPy数组中,或者将NumPy数组中的数据保存到磁盘上。以下是一些常用的NumPy输入输出函数及其简要说明:

7.1 二进制文件输入输出

  • numpy.save():将数组保存到二进制文件中,扩展名为.npy。这是保存NumPy数组数据到磁盘的常用方法。
    import numpy as np
    arr = np.array([[1, 2, 3], [4, 5, 6]])
    np.save('array.npy', arr)
    
  • numpy.load():从.npy文件中加载数组。
    loaded_arr = np.load('array.npy')
    

7.2 压缩的二进制文件输入输出

  • numpy.savez():将多个数组保存到未压缩的.npz文件中。
    a = np.array([[1, 2], [3, 4]])
    b = np.array([1, 2, 3, 4])
    np.savez('array_archive.npz', a=a, b=b)
    
  • numpy.savez_compressed():将多个数组保存到压缩的.npz文件中。

7.3 文本文件输入输出

  • numpy.loadtxt():从文本文件中加载数据,适用于无缺失值的情况。
    data = np.loadtxt('file.txt', delimiter=',')  # 如果数据由逗号分隔
    
  • numpy.savetxt():将数据保存为文本文件。可以指定分隔符、头信息、格式等。
    np.savetxt('output.txt', arr, delimiter=',')
    
  • numpy.genfromtxt():从文本文件中加载数据,可以处理缺失值。
    data = np.genfromtxt('file_with_missing.csv', delimiter=',', filling_values=-999)
    

注意事项:
当使用numpy.savetxt()和文件对象时,注意确保以文本模式(‘w’)而不是二进制模式(‘wb’)打开文件,因为savetxt()期望接收一个字符串作为文件名,而不是文件对象。
对于大文件,使用二进制文件(.npy.npz)进行读写通常比文本文件更高效。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com