NumPy 数组操作

NumPyBeginner
立即练习

介绍

NumPy 是一个用于数值计算的 Python 库。它专为处理数组和矩阵而设计,是科学计算中的强大工具。在本实验中,你将学习与 NumPy 数组操作相关的以下三个主题:

  1. 数学运算
  2. 广播(Broadcasting)
  3. 通用函数(Universal Functions)
这是一个实验(Guided Lab),提供逐步指导来帮助你学习和实践。请仔细按照说明完成每个步骤,获得实际操作经验。根据历史数据,这是一个 初级 级别的实验,完成率为 98%。获得了学习者 97% 的好评率。

数学运算

NumPy 提供了多种针对数组的数学运算。这些运算可以在一个或多个数组上执行。

打开 Python Shell

在终端中输入以下命令以打开 Python shell:

python3

导入 NumPy

NumPy 已经安装,你可以在 Python 代码中导入它:

import numpy as np

逐元素运算

逐元素运算是指对数组中的每个元素执行的操作。

让我们创建两个数组并执行一些逐元素运算:

## 创建两个数组
arr1 = np.array([1, 2, 3, 4])
arr2 = np.array([5, 6, 7, 8])

## 两个数组相加
print("两个数组相加:", arr1 + arr2)

## 两个数组相减
print("两个数组相减:", arr1 - arr2)

## 两个数组相乘
print("两个数组相乘:", arr1 * arr2)

## 两个数组相除
print("两个数组相除:", arr1 / arr2)

## 计算两个数组的模运算
print("两个数组的模运算:", arr1 % arr2)

## 将数组的元素提升到指定幂次
print("数组的幂运算:", arr1 ** 2)

输出:

两个数组相加:  [ 6  8 10 12]
两个数组相减:  [-4 -4 -4 -4]
两个数组相乘:  [ 5 12 21 32]
两个数组相除:  [0.2        0.33333333 0.42857143 0.5       ]
两个数组的模运算:  [1 2 3 4]
数组的幂运算:  [ 1  4  9 16]

数组级运算

数组级运算是指对整个数组执行的操作。

让我们创建一个数组并执行一些数组级运算:

## 创建一个数组
arr = np.array([1, 2, 3, 4])

## 计算数组中所有元素的和
print("数组的和:", np.sum(arr))

## 计算数组中所有元素的乘积
print("数组的乘积:", np.prod(arr))

## 查找数组中的最小元素
print("数组中的最小元素:", np.min(arr))

## 查找数组中的最大元素
print("数组中的最大元素:", np.max(arr))

## 计算数组中所有元素的平均值
print("数组的平均值:", np.mean(arr))

## 计算数组中所有元素的标准差
print("数组的标准差:", np.std(arr))

输出:

数组的和:  10
数组的乘积:  24
数组中的最小元素:  1
数组中的最大元素:  4
数组的平均值:  2.5
数组的标准差:  1.118033988749895

广播(Broadcasting)

广播(Broadcasting)是 NumPy 的一项特性,允许在不同形状的数组之间执行逐元素操作。广播在处理不同维度的数组时尤其有用。

让我们创建一个数组并执行一些广播操作:

## 创建两个不同形状的数组
array1 = np.array([1, 2, 3])
array2 = np.array([[4, 5, 6], [7, 8, 9]])

## 将较小的数组广播到较大的数组
print("使用广播进行数组相加:", array1 + array2)

print("使用广播进行数组相减:", array1 - array2)

print("使用广播进行数组相乘:", array1 * array2)

print("使用广播进行数组相除:", array1 / array2)

输出:

使用广播进行数组相加:  [[ 5  7  9]
                         [ 8 10 12]]

使用广播进行数组相减:  [[-3 -3 -3]
                          [-6 -6 -6]]

使用广播进行数组相乘:  [[ 4 10 18]
                          [7 16 27]]

使用广播进行数组相除:  [[0.25       0.4        0.5       ]
                           [0.14285714 0.25       0.33333333]]

在上述代码中,我们创建了两个数组,array1 的形状为 (3,),array2 的形状为 (2,3)。借助 NumPy 的广播特性,我们在 array1array2 之间执行了逐元素操作。较小的数组 array1 被广播到较大的数组 array2,以便执行逐元素操作。广播使得在不同形状的数组上执行操作成为可能。

通用函数(Universal Functions)

通用函数(Universal Functions,简称 ufuncs)是以逐元素方式操作数组的函数。它们提供了快速且高效的数组操作。

让我们创建一个数组并执行一些通用函数操作:

## 创建一个数组
arr = np.array([1, 2, 3, 4])

## 计算数组中每个元素的平方根
print("数组的平方根:", np.sqrt(arr))

## 计算数组中每个元素的指数
print("数组的指数:", np.exp(arr))

## 计算数组中每个元素的正弦值
print("数组的正弦值:", np.sin(arr))

## 计算数组中每个元素的余弦值
print("数组的余弦值:", np.cos(arr))

## 计算数组中每个元素的自然对数
print("数组的自然对数:", np.log(arr))

输出:

数组的平方根:  [1.         1.41421356 1.73205081 2.        ]
数组的指数:  [ 2.71828183  7.3890561  20.08553692 54.59815003]
数组的正弦值:  [ 0.84147098  0.90929743  0.14112001 -0.7568025 ]
数组的余弦值:  [ 0.54030231 -0.41614684 -0.9899925  -0.65364362]
数组的自然对数:  [0.         0.69314718 1.09861229 1.38629436]

总结

恭喜!你现在已经学习了 NumPy 数组操作,包括数学运算、广播(Broadcasting)和通用函数(Universal Functions)。通过这些知识,你现在可以使用 Python 执行广泛的数值计算任务。