NumPy 高级主题

PythonPythonBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

介绍

本实验将涵盖 NumPy 的一些高级功能,包括线性代数、随机数生成和掩码数组(masked arrays)。

使用 NumPy 进行线性代数运算

NumPy 提供了一套全面的函数用于线性代数运算。以下是一些示例:

打开 Python Shell

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

python3

点积

可以使用 np.dot() 函数计算两个数组的点积。两个数组 A 和 B 的点积定义为 A 和 B 对应元素乘积的总和。

import numpy as np

## 创建两个数组
a = np.array([1, 2])
b = np.array([3, 4])

## 计算点积
dot_product = np.dot(a, b)

print(dot_product) ## 输出: 11

矩阵乘法

可以使用 @ 运算符或 np.matmul() 函数进行矩阵乘法。

请仔细阅读以下示例。

## 创建两个矩阵
A = np.array([[1, 2], [3, 4]])
B = np.array([[5, 6], [7, 8]])

## 矩阵乘法
C = A @ B

print(C) ## 输出: [[19 22], [43 50]]

你也可以通过另一种方式得到结果。

## 创建两个矩阵
A = np.array([[1, 2], [3, 4]])
B = np.array([[5, 6], [7, 8]])

## 矩阵乘法
C = np.matmul(A,B)

print(C) ## 输出: [[19 22], [43 50]]

行列式和逆矩阵

可以使用 np.linalg.det()np.linalg.inv() 函数分别计算矩阵的行列式和逆矩阵。

## 创建一个矩阵
A = np.array([[1, 2], [3, 4]])

## 计算行列式和逆矩阵
det_A = np.linalg.det(A)
inv_A = np.linalg.inv(A)

print(det_A) ## 输出: -2.0
print(inv_A) ## 输出: [[-2.   1. ], [ 1.5 -0.5]]

练习

现在轮到你构建两个数组并使用 np.dot() 函数计算点积。使用 @np.matmul() 计算矩阵乘法,并使用 np.linalg.det()np.linalg.inv() 函数计算矩阵的行列式和逆矩阵。

随机数生成

NumPy 提供了多种生成随机数的函数。以下是一些示例:

生成随机数

可以使用 np.random.rand() 函数生成 0 到 1 之间的随机数。

## 生成一个 2x2 的随机数矩阵
a = np.random.rand(2, 2)

print(a) ## 输出: [[0.43584547 0.37752558], [0.08936734 0.65526767]]

生成随机整数

可以使用 np.random.randint() 函数生成两个指定数字之间的随机整数。

## 生成一个 1 到 10 之间的随机整数数组
a = np.random.randint(1, 10, size=(3, 3))

print(a) ## 输出: [[8 7 3], [3 3 7], [8 8 7]]

生成正态分布

可以使用 np.random.normal() 函数生成符合正态分布的随机数。

## 生成一个符合正态分布的随机数数组
a = np.random.normal(0, 1, size=(2, 2))

print(a) ## 输出: [[ 1.28418331 -0.90564647], [-0.76477896  1.69903421]]

练习

现在请根据上述函数完成随机数、随机整数和正态分布的输出。请完成此练习。

掩码数组(Masked Arrays)

掩码数组是附带有掩码的数组。掩码是一个布尔值数组,用于指示数组中的哪些元素应该被掩码(隐藏)。NumPy 提供了 np.ma 模块来处理掩码数组。

创建掩码数组

可以使用 np.ma.masked_array() 函数创建掩码数组。

## 创建一个带有掩码的数组
a = np.ma.masked_array([1, 2, 3, 4], mask=[True, False, False, True])

print(a) ## 输出: [-- 2 3 --]

应用掩码

可以使用 np.ma.masked_where() 函数将掩码应用到数组上。

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

## 创建一个掩码
mask = a > 2

## 应用掩码
b = np.ma.masked_where(mask, a)

print(b) ## 输出: [1 2 -- --]

掩码无效值

掩码数组可用于处理无效值,例如 NaN(非数字)或无穷大。

## 创建一个包含无效值的数组
a = np.array([1, np.nan, np.inf, 4])

## 创建一个掩码数组
b = np.ma.masked_invalid(a)

print(b) ## 输出: [1.0 -- -- 4.0]

练习

现在,请使用 NumPy 提供的 np.ma 模块完成掩码数组的创建。同时,使用 np.ma.masked_where() 函数将掩码应用到数组上,最后使用 np.ma.masked_invalid() 处理无效值。请完成此练习。

总结

恭喜你完成了本次实验!

在本教程中,我们涵盖了 NumPy 的一些高级主题,包括线性代数、随机数生成和掩码数组。这些功能在数据分析和科学计算等许多应用中非常有用。

请继续努力!