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允许您使用布尔数组作为掩码,根据某些条件访问元素。例如,您可以创建一个布尔数组,指示数组中哪些元素满足特定条件,然后使用该数组作为掩码来检索相应的元素。

示例

这是一个布尔索引的示例:

Open Compiler
import numpy as np arr = np.array([1, 2, 3, 4, 5]) mask = arr > 2 print(arr[mask])

输出

[3, 4, 5]

整数数组索引

NumPy允许您使用整数数组作为索引来访问特定元素。此技术称为整数数组索引。通过传递索引数组,您可以检索与这些索引对应的元素。

示例

这是一个整数数组索引的示例:

Open Compiler
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()函数接收所需的形状作为元组,并返回具有指定维度的新的数组。

示例

这是一个重塑数组的示例:

Open Compiler
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会根据元素总数自动计算合适的维度。

示例

这是一个将多维数组转换为一维数组的示例:

Open Compiler
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()**连接数组的示例:

Open Compiler
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()**堆叠数组的示例:

Open Compiler
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允许您对数组执行基本的算术运算,例如加法、减法、乘法和除法。这些运算逐元素执行,这意味着单独操作数组的对应元素。

示例

以下是数组基本算术运算的示例:

Open Compiler
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提供了广泛的数学函数,可以逐元素应用于数组。这些函数包括三角函数、对数函数、指数函数等等。

示例

以下是将数学函数应用于数组的示例:

Open Compiler
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提供各种统计函数,用于计算数组上的统计量度。这些函数包括计算平均值、标准差、最小值、最大值等等。

示例

以下是使用数组统计函数的示例:

Open Compiler
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数组的基本知识,包括创建数组、访问元素、操作其形状、执行数学运算和比较数组。

更新于:2023年8月14日

浏览量:163

开启您的职业生涯

完成课程获得认证

开始学习
广告