首页 > 编程笔记 > Python笔记 阅读:2

NumPy数组的常见操作(附带实例,新手必看)

NumPy 是 Numerical Python 的简称,是重要的 Python 数值计算包。

在大量的数据运算中,Python 自身提供的 list 效率并不高,而 NumPy 提供了高效的多维数组对象,使复杂的数学计算变得更简单、快速。

安装NumPy

NumPy 的安装非常简单,只需在命令行或终端中使用 pip 工具进行安装:

pip install numpy

如果成功安装 NumPy,则会出现如下图所示的界面。

创建NumPy数组

NumPy 的核心功能是 ndarray,即 n-dimensional array,该功能支持多维数组。用户可以使用 numpy.array() 函数,从 Python 列表中创建数组。

下面举一个简单的例子:
# 导入NumPy
import numpy as np

# 创建一个一维 NumPy 数组
a = np.array([1,2,3,4,5])
print(a)
上述代码的执行结果为:

[1,2,3,4,5]


同样,可以创建二维甚至更高维度的数组:
# 导入NumPy
import numpy as np

# 创建一个二维 NumPy 数组
b = np.array([[1,2,3],[4,5,6]])
print(b)
上述代码的执行结果为:

[[1 2 3]
[4 5 6]]

NumPy数组操作

NumPy 数组支持许多数学操作,这些操作会应用于数组中的每一个元素,这被称为数组的矢量化(Vectorization)。使用这些数学操作会使代码更简洁,运行速度也更快。

例如,可以将每个元素乘一个数,或进行更复杂的数学操作:
# 导入NumPy
import numpy as np

a = np.array([1,2,3,4,5])
b = a * 2  # 每个元素乘 2
print(b)
c = np.sqrt(a)  # 每个元素求平方根
print(c)
上述代码的执行结果为:

[ 2  4  6  8 10]
[1.         1.41421356 1.73205081 2.         2.23606798]

NumPy索引与切片

与 Python 的 list 类似,NumPy 数组支持索引和切片操作:
a = np.array([1,2,3,4,5])

# 索引操作
print(a[0])

# 切片操作
print(a[1:3])

在处理二维或更高维度的数组时,NumPy 数组的索引和切片操作功能更为强大:
b = np.array([[1,2,3],[4,5,6]])

# 索引操作
print(b[0,1])  # 输出:2

# 切片操作
print(b[:,1:3])
上述代码的执行结果为:

1
[2 3]
2
[[2 3]
[5 6]]

NumPy 数组的索引和切片操作是原地操作,即这些操作并不会创建新的数组,而是提供原数组的视图。这意味着当修改切片或索引得到数组时,原数组也会被修改。

在上面的代码中,需要掌握如下知识:

NumPy条件索引

在 NumPy 中,用户可以使用条件表达式索引数组。这是一种非常强大的功能,可以使用户根据某个条件选择数组中的元素。

例如,用户可以选择数组中所有大于 2 的元素:
a = np.array([1,2,3,4,5])

# 条件索引
b = a[a > 2]
print(b)
上述代码的执行结果为:

[3 4 5]

NumPy广播(Broadcasting)

广播是 NumPy 中处理不同大小数组的强大工具。例如,用户可能有一个较小的数组和一个较大的数组,并且希望使用较小的数组多次完成某些操作,从而能处理较大的数组。

例如:
import numpy as np
a = np.array([1,2,3])
b = np.array([1,2])

# 将一个值加到一个数组的每个元素上
result = a + 5
print(result)  # 输出:array([6,7,8])

# 将一个数组加到另一个数组的每一行上
A = np.array([[1,2,3],[4,5,6],[7,8,9]])
result = A + a
print(result)
上述代码的执行结果为:

[6 7 8]
[[ 2  4  6]
[ 5  7  9]
[ 8 10 12]]

广播的使用方法为:如果两个数组在某个维度的长度是相同的,或两个数组中的一个数组在该维度的长度为 1,则这两个数组在该维度上是兼容的。如果两个数组在所有维度上都是兼容的,则这两个数组就可以使用广播。

在上面的代码中,result=A+a 这行代码将数组 a 加到数组 A 的每一行上。由于数组 a 和数组 A 的形状不同,数组 a 是一个长度为 3 的一维数组,数组 A 是一个 3x3 的二维数组,在这种情况下,就需要广播。数组 a 被广播到数组 A 的每一行上,再执行加法操作。因此,输出的结果是一个新的二维数组,每个元素都是对应元素相加的结果。

NumPy聚合

NumPy提供在数组上进行聚合操作的函数,如计算数组的总和、平均值、最大值、最小值等。

下面是一些示例:
import numpy as np
a = np.array([1,2,3,4,5])

# 求和
result = np.sum(a)
print(result)  # 输出:15

# 求平均值
result = np.mean(a)
print(result)  # 输出:3.0

# 求最大值
result = np.max(a)
print(result)  # 输出:5

# 求最小值
result = np.min(a)
print(result)  # 输出:1
上述代码的执行结果为:

15
3.0
5
1

NumPy排序

NumPy 提供了 np.sort() 函数,用于对数组中的元素进行排序,例如:
import numpy as np
a = np.array([2,4,1,5,3])

# 排序
result = np.sort(a)
print(result)
上述代码的执行结果为:

[1 2 3 4 5]

上面这些功能都是 NumPy 的核心功能,在数据科学和机器学习中经常使用。有了这些工具,用户将能更有效地处理和分析数据。

相关文章