Python - Numpy 数组上的操作
NumPy(Numerical Python)是 Python 中用于科学计算的强大库。它提供了一个高性能的多维数组对象和用于处理这些数组的工具。NumPy 提供了访问数组内元素的灵活方法。您可以使用索引和切片操作来检索数组中的特定元素或部分。
索引
在 NumPy 中,索引从 0 开始,类似于 Python 列表。您可以通过在方括号内指定数组的索引来访问数组的各个元素。例如,给定一个数组 arr,您可以使用 arr[i] 访问索引 i 处的元素。
切片
NumPy 数组还支持切片,这允许您检索数组的一部分。切片是使用冒号 (:) 运算符完成的。切片的基本语法是start:stop:step,其中start是起始索引,stop是结束索引(不包括),step是索引之间的增量。
NumPy数组切片操作示例−
arr[2:6]检索从索引2到5(不包括6)的元素。
arr[3:]检索从索引3到数组末尾的元素。
arr[::2]检索步长为2的元素(跳过其他每个元素)。
arr[::-1]以相反的顺序检索元素。
布尔索引
NumPy允许您将布尔数组用作掩码可根据特定条件访问元素。例如,您可以创建一个布尔数组,指示数组中哪些元素满足特定条件,然后使用该数组作为掩码来检索相应的元素。
示例
以下是布尔索引的示例 −
import numpy as np arr = np.array([1, 2, 3, 4, 5]) mask = arr > 2 print(arr[mask])
输出
[3, 4, 5]
整数数组索引
NumPy 允许您使用整数数组作为索引来访问特定元素。此技术称为整数数组索引。通过传递索引数组,您可以检索与这些索引相对应的元素。
示例
以下是整数数组索引的示例 -
import numpy as np arr = np.array([1, 2, 3, 4, 5]) indices = np.array([0, 2, 4]) print(arr[indices])
输出
[1, 3, 5]
通过掌握这些技术,您可以高效地从 NumPy 数组中提取和处理所需的数据。
数组操作
重塑数组
NumPy 允许您使用 reshape() 函数重塑数组。重塑数组会改变其维度,同时保持元素总数不变。 reshape() 函数将所需形状作为元组,并返回具有指定维度的新数组。
示例
以下是重塑数组的示例 −
import numpy as np arr = np.array([1, 2, 3, 4, 5, 6]) reshaped_arr = arr.reshape((2, 3)) print(reshaped_arr)
输出
[[1 2 3] [4 5 6]]
在上面的示例中,原始包含六个元素的数组 arr 被重塑为 2x3 数组 reshaped_arr。重塑后的数组保留了原始数组的元素,但按指定的形状排列它们。
您还可以使用 reshape() 函数将多维数组转换为一维数组。通过将形状指定为 -1,NumPy 会根据元素总数自动计算适当的维度。
示例
以下是将多维数组转换为一维数组的示例 -
import numpy as np arr = np.array([[1, 2, 3], [4, 5, 6]]) reshaped_arr = arr.reshape(-1) print(reshaped_arr)
输出
[1 2 3 4 5 6]
连接数组
NumPy 提供 numpy.concatenate() 和 numpy.stack() 等函数,用于沿不同轴组合多个数组。连接允许您水平或垂直连接数组,从而有效地增加其大小或将它们组合成更大的数组。
numpy.concatenate() − 此函数沿现有轴连接数组。默认情况下,它按行(轴 0)连接数组,但您可以指定 axis 参数以沿不同的轴连接。
示例
以下是使用连接数组的示例 numpy.concatenate() −
import numpy as np arr1 = np.array([[1, 2], [3, 4]]) arr2 = np.array([[5, 6]]) concatenated_arr = np.concatenate((arr1, arr2), axis=0) print(concatenated_arr)
输出
[[1 2] [3 4] [5 6]]
在上面的例子中,arr1和arr2沿轴 0 连接,产生一个新数组concatenated_arr
numpy.stack() − 此函数沿新轴堆叠数组。它需要一个数组序列和 axis 参数来指定数组将沿着哪个新轴堆叠。
示例
以下是使用 numpy.stack() −
import numpy as np arr1 = np.array([1, 2, 3]) arr2 = np.array([4, 5, 6]) stacked_arr = np.stack((arr1, arr2), axis=1) print(stacked_arr)
输出
[[1 4] [2 5] [3 6]]
在上面的例子中,arr1 和 arr2 沿着新轴(轴 1)堆叠,从而产生新数组 stacked_arr。
数组上的数学运算
基本算术运算
NumPy 允许您对数组执行基本算术运算,例如加法、减法、乘法和除法。这些运算是逐元素执行的,这意味着数组的相应元素是单独操作的。
示例
以下是数组上基本算术运算的示例 -
import numpy as np arr1 = np.array([1, 2, 3]) arr2 = np.array([4, 5, 6]) addition = arr1 + arr2 subtraction = arr1 - arr2 multiplication = arr1 * arr2 division = arr1 / arr2 print(addition) print(subtraction) print(multiplication) print(division)
输出
[5 7 9] [-3 -3 -3] [ 4 10 18] [0.25 0.4 0.5 ]
在上面的例子中,基本算术运算按元素方式应用于 arr1 和 arr2 的相应元素,从而产生新的数组加法、减法、乘法和除法。
数学函数
NumPy 提供了各种数学函数,可以按元素方式应用于数组。这些函数包括三角函数、对数函数、指数函数等。
示例
以下是将数学函数应用于数组的示例 -
import numpy as np arr = np.array([1, 2, 3]) sin_values = np.sin(arr) log_values = np.log(arr) exp_values = np.exp(arr) print(sin_values) print(log_values) print(exp_values)
输出
[0.84147098 0.90929743 0.14112001] [0. 0.69314718 1.09861229] [ 2.71828183 7.3890561 20.08553692]
在上面的例子中,np.sin()、np.log() 和 np.exp() 函数按元素应用于数组 arr,从而产生新的数组 sin_values、log_values 和 exp_values。
统计函数
NumPy 提供了各种统计函数来计算数组上的统计度量。这些函数包括计算平均值、标准差、最小值、最大值等。
示例
以下是在数组上使用统计函数的示例 -
import numpy as np arr = np.array([1, 2, 3, 4, 5]) mean_value = np.mean(arr) std_value = np.std(arr) min_value = np.min(arr) max_value = np.max(arr) print(mean_value) print(std_value) print(min_value) print(max_value)
输出
3.0 1.4142135623730951 1 5
在上面的例子中,np.mean()、np.std()、np.min() 和 np.max() 函数用于计算数组 arr 的平均值、标准差、最小值和最大值。
结论
NumPy 数组是 Python 中科学计算的基本数据结构。我们介绍了使用 NumPy 数组的基本知识,包括创建数组、访问元素、操作其形状、执行数学运算和比较数组。