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] 反向检索元素。
Learn Python in-depth with real-world projects through our Python certification course. Enroll and become a certified expert to boost your career.
布尔索引
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**的对应元素,生成新的数组addition、subtraction、multiplication和division。
数学函数
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数组的基本知识,包括创建数组、访问元素、操作其形状、执行数学运算和比较数组。