【Python】使用NumPy处理数组以及常用函数总结 您所在的位置:网站首页 创建数组的常用函数是什么 【Python】使用NumPy处理数组以及常用函数总结

【Python】使用NumPy处理数组以及常用函数总结

2024-07-01 13:35| 来源: 网络整理| 查看: 265

文章目录 一、什么是NumPy1、主要特点2、主要功能 二、常用函数1、创建函数2、数学运算1)算术运算2)逻辑运算3)统计运算4)线性代数运算 3、其他函数1)数组操作函数2)统计函数3)数组索引和切片函数4)随机数生成 三、数组的索引与切片1、索引2、切片 参考

一、什么是NumPy

NumPy(Numerical Python的简称)是一个用于处理数组(特别是多维数组)和矩阵运算的Python库,同时也提供了大量的高级数学函数来操作这些数组。NumPy构建在Python之上,为Python提供了大量的数学计算功能,并极大地提升了Python在执行大量数学计算和数组操作时的性能和效率。

1、主要特点

强大的N维数组对象:NumPy定义了一个强大的N维数组对象,称为ndarray。这个对象是一个快速、灵活的大数据容器,可以存储大量的数据,并且提供了方便的数据操作方法。

高效的性能:NumPy的内部实现使用了C语言,这使得其在进行大量数值计算时,性能远高于纯Python实现。NumPy数组在内存中是以连续块的形式存储的,这也有助于提高数据处理的效率。

广播功能:NumPy的广播功能允许对不同形状的数组进行数学运算,而无需进行额外的数据复制。这一特性在处理不同维度的数据时非常有用。

丰富的函数库:NumPy提供了大量的函数来处理数组,包括但不限于数学函数(如sin、cos、exp等)、统计函数(如mean、std、var等)、排序函数以及线性代数函数等。

与Python生态的集成:NumPy与Python的其他科学计算库(如SciPy、Pandas、Matplotlib等)紧密集成,可以方便地进行数据处理、科学计算和可视化。

易用性和灵活性:NumPy的API设计得非常直观和易用,用户可以轻松地执行复杂的数组操作和数学计算。同时,NumPy也支持自定义的数据类型,为用户提供了极大的灵活性。

2、主要功能

数组创建和操作:NumPy提供了多种方式来创建数组,如通过列表、元组等Python原生数据结构,或者直接使用NumPy的函数(如numpy.zeros、numpy.ones等)。此外,NumPy还提供了丰富的数组操作功能,如切片、索引、形状变换等。

数学和逻辑运算:NumPy支持对数组进行各种数学运算(加、减、乘、除等)和逻辑运算(与、或、非等),这些操作都可以直接在数组上进行,而无需编写循环。

线性代数和统计功能:NumPy包含了大量的线性代数函数,如矩阵乘法、特征值分解等。同时,它也提供了丰富的统计函数,用于计算数组的均值、中位数、标准差等统计量。

随机数生成:NumPy包含了一个强大的随机数生成器,可以生成各种分布的随机数,如均匀分布、正态分布等。

与C/C++/Fortran代码的集成:NumPy提供了与C/C++/Fortran等语言的接口,使得用户可以在Python中调用这些语言编写的函数,从而进一步提高计算性能。

数据IO功能:NumPy支持从文件中读取和写入数据,包括文本文件和二进制文件,这为用户在处理大量数据时提供了便利。

二、常用函数 1、创建函数

在NumPy中,有多种函数可以用来创建数组。更多函数参考官网

这些函数提供了创建NumPy数组的不同方式,以满足各种数值计算需求。在实际应用中,可以根据具体的使用场景选择合适的创建函数。

以下是一些主要的NumPy数组创建函数及其详细介绍和示例:

numpy.array():将输入数据(列表、元组等)转换为NumPy ndarray对象

import numpy as np arr = np.array([1, 2, 3, 4]) print(arr) # 输出: [1 2 3 4]

numpy.zeros():创建一个全零的数组,形状由参数指定

import numpy as np zeros_arr = np.zeros((2, 3)) print(zeros_arr) # 输出: # [[0. 0. 0.] # [0. 0. 0.]]

numpy.ones():创建一个全一的数组,形状由参数指定

import numpy as np ones_arr = np.ones((2, 3)) print(ones_arr) # 输出: # [[1. 1. 1.] # [1. 1. 1.]]

numpy.empty():创建一个给定形状和类型的新数组,但不初始化数组的条目(即数组的内容是随机的,取决于内存的状态)

import numpy as np empty_arr = np.empty((2, 3)) print(empty_arr) # 输出内容可能是随机的,因为是未初始化的内存

numpy.eye():创建一个对角线为1,其余位置为0的二维数组(即单位矩阵)。

import numpy as np identity_matrix = np.eye(3) print(identity_matrix) # 输出: # [[1. 0. 0.] # [0. 1. 0.] # [0. 0. 1.]]

numpy.arange():返回在给定范围内的等差数组。

import numpy as np arange_arr = np.arange(5) print(arange_arr) # 输出: [0 1 2 3 4]

numpy.linspace():在指定的区间内返回均匀间隔的数字。

import numpy as np linspace_arr = np.linspace(0, 10, 5) print(linspace_arr) # 输出: [ 0. 2.5 5. 7.5 10. ]

numpy.fromfunction():通过函数来创建数组,函数会对每个索引调用一次,并使用返回的结果填充数组。

import numpy as np def f(x, y): return x + y func_arr = np.fromfunction(f, (3, 3), dtype=int) print(func_arr) # 输出: # [[0 1 2] # [1 2 3] # [2 3 4]]

numpy.full():创建一个给定形状和类型的新数组,并用指定的值填充。

import numpy as np full_arr = np.full((2, 3), 7) print(full_arr) # 输出: # [[7 7 7] # [7 7 7]] 2、数学运算 1)算术运算

NumPy支持基本的算术运算符,如加、减、乘、除等。这些运算符可以对NumPy数组进行元素级的操作。

加法:numpy.add() 或使用运算符 + import numpy as np a = np.array([1, 2, 3]) b = np.array([4, 5, 6]) c = np.add(a, b) # 或者 c = a + b print(c) # 输出 [5 7 9] 减法:numpy.subtract() 或使用运算符 - c = np.subtract(b, a) # 或者 c = b - a print(c) # 输出 [3 3 3] 乘法:numpy.multiply() 或使用运算符 * c = np.multiply(a, b) # 或者 c = a * b print(c) # 输出 [4 10 18] 除法:numpy.divide() 或使用运算符 / c = np.divide(b, a) # 或者 c = b / a print(c) # 输出 [4. 2.5 2. ]

此外,NumPy还支持取模(numpy.mod() 或 %)、取幂(numpy.power() 或 **)以及取平方根(numpy.sqrt())等算术运算。

2)逻辑运算

NumPy提供了基本的逻辑运算符,用于对数组进行元素级的逻辑比较。这些运算符包括等于(==)、不等于(!=)、大于(>)、小于(=)、小于等于( 2) # 返回一个布尔数组 [False False True] 3)统计运算

NumPy提供了大量的统计运算函数,用于计算数组的统计特性。这些函数包括求和(numpy.sum())、平均值(numpy.mean())、最大值(numpy.max())、最小值(numpy.min())、方差(numpy.var())和标准差(numpy.std())等。例如:

s = np.sum(a) # 计算数组a的和,输出6 m = np.mean(a) # 计算数组a的平均值,输出2.0 arr = np.array([1, 2, 3, 4]) std_dev = np.std(arr) # 输出: 1.118033988749895 4)线性代数运算

NumPy还提供了丰富的线性代数运算函数,如矩阵乘积(numpy.dot() 或 @)、转置(numpy.transpose() 或 .T)、逆矩阵(numpy.linalg.inv())等。这些函数使得NumPy在处理线性代数问题时非常高效。例如:

numpy.dot():计算矩阵乘积 A = np.array([[1, 2], [3, 4]]) B = np.array([[5, 6], [7, 8]]) C = np.dot(A, B) # 或者 C = A @ B print(C) # 输出 [[19 22] [43 50]]

numpy.linalg.det():计算矩阵的行列式

import numpy as np arr = np.array([[1, 2], [3, 4]]) det_val = np.linalg.det(arr) # 输出: -2.0

此外,NumPy还支持更多的数学运算和函数,如三角函数、指数函数、对数函数等。这些功能使得NumPy成为Python中进行科学计算和数据分析的强大工具。

3、其他函数 1)数组操作函数

numpy.reshape():改变数组的形状而不改变数据。

import numpy as np a = np.arange(6) # [0, 1, 2, 3, 4, 5] b = a.reshape(2, 3) print(b) # 输出: # [[0 1 2] # [3 4 5]]

numpy.concatenate():连接两个或多个数组。

import numpy as np a = np.array([[1, 2], [3, 4]]) b = np.array([[5, 6]]) c = np.concatenate((a, b), axis=0) print(c) # 输出: # [[1 2] # [3 4] # [5 6]]

numpy.sort():对数组进行排序

import numpy as np arr = np.array([3, 1, 4, 1, 5, 9]) sorted_arr = np.sort(arr); # 输出: [1 1 3 4 5 9]

numpy.copy():数组复制

import numpy as np # 创建一个NumPy数组 original_array = np.array([1, 2, 3, 4, 5]) # 使用numpy.copy()复制数组 copied_array = np.copy(original_array) # 修改原数组 original_array[0] = 100 # 输出原数组和复制后的数组 print("Original array:", original_array) print("Copied array:", copied_array) # Original array: [100 2 3 4 5] # Copied array: [1 2 3 4 5] 2)统计函数

numpy.median():计算数组的中位数。

import numpy as np a = np.array([1, 2, 3, 4, 5]) median = np.median(a) print(median) # 输出: 3.0

numpy.percentile():计算数组的百分位数。

import numpy as np a = np.array([1, 2, 3, 4, 5]) p50 = np.percentile(a, 50) # 计算50%百分位数,即中位数 print(p50) # 输出: 3.0 3)数组索引和切片函数

numpy.where():返回满足条件的元素的索引。

import numpy as np a = np.array([1, 2, 3, 4, 5, 6]) indices = np.where(a > 3) print(indices) # 输出满足条件的索引,例如: (array([3, 4, 5]),)

numpy.argmax() 和 numpy.argmin():分别返回数组中最大值和最小值的索引。

import numpy as np a = np.array([1, 2, 3, 0, 4, 5]) max_index = np.argmax(a) min_index = np.argmin(a) print(max_index) # 输出最大值5的索引: 5 print(min_index) # 输出最小值0的索引: 3 4)随机数生成

numpy.random.rand():生成0到1之间的随机数。

import numpy as np random_array = np.random.rand(3, 2) # 生成一个3x2的数组,元素值在0到1之间 print(random_array)

numpy.random.randint():生成指定范围内的随机整数。

import numpy as np random_ints = np.random.randint(0, 10, size=(2, 3)) # 生成一个2x3的数组,元素是0到9之间的随机整数 print(random_ints)

这些函数只是NumPy库功能的一小部分,但它们在数据分析和科学计算中非常常用。NumPy的强大之处在于它能够高效地处理大型多维数组和矩阵,并提供丰富的数学函数来操作这些数据。

三、数组的索引与切片

在NumPy中,数组的索引与切片是非常核心的操作,它们允许我们访问和修改数组中的特定元素或元素子集。

1、索引

在NumPy中,你可以通过索引来访问数组中的单个元素。索引是基于0的,这意味着第一个元素的索引是0,第二个元素的索引是1,依此类推。

例如:

import numpy as np # 创建一个一维数组 arr = np.array([1, 2, 3, 4, 5]) # 访问数组中的第一个元素 print(arr[0]) # 输出: 1 # 访问数组中的第三个元素 print(arr[2]) # 输出: 3

对于多维数组,你需要使用逗号分隔的索引元组来访问元素。例如:

# 创建一个二维数组 arr_2d = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) # 访问第一行第二列的元素 print(arr_2d[0, 1]) # 输出: 2 # 访问第二行第三列的元素 print(arr_2d[1, 2]) # 输出: 6 2、切片

切片允许你访问数组的一个子集,而不是单个元素。切片的基本语法是start:stop:step,其中start是切片的起始索引(包含),stop是切片的结束索引(不包含),step是切片的步长。

例如:

# 创建一个一维数组 arr = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9]) # 获取索引1到5(不包含5)之间的元素 print(arr[1:5]) # 输出: [2 3 4 5] # 获取索引2到数组末尾的所有元素,步长为2 print(arr[2::2]) # 输出: [3 5 7 9]

对于多维数组,你可以使用逗号分隔的切片来访问子集。例如:

# 创建一个二维数组 arr_2d = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) # 获取第一列的所有元素 print(arr_2d[:, 0]) # 输出: [1 4 7] # 获取第一行和第二行的前两列 print(arr_2d[:2, :2]) # 输出: [[1 2] [4 5]]

注意,切片操作返回的是原数组的一个视图(如果可能的话),这意味着修改切片中的元素也会修改原数组中的相应元素。如果你想要一个独立的副本而不是视图,可以使用copy()方法。

参考 https://numpy.org/https://blog.csdn.net/m0_74344139/article/details/134842295


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有