
7个你不知道但需要的NumPy技巧
图片由 Editor | ChatGPT 提供
引言
NumPy 是最受欢迎的 Python 库之一,用于处理数字和数据。它速度快、易于使用,并包含许多可以在处理大型数据集时节省您时间的功能。
在本文中,我们将介绍 7 个有用的 NumPy 技巧,可以让您的代码更简洁、更快、更容易理解。每个技巧都附带示例和实际用例,您可以立即开始应用。
1. 广播
NumPy 中的广播允许您对不同形状的数组执行算术运算,而无需编写显式循环。NumPy 会自动“拉伸”较小的数组以匹配较大数组的形状,而不是手动复制数据以匹配形状。
1 2 3 4 5 6 7 |
import numpy as np a = np.array([1, 2, 3]) # 形状 (3,) b = np.array([[10], [20]]) # 形状 (2, 1) result = a + b print(result) |
输出
1 2 |
[[11 12 13] [21 22 23]] |
用例:以恒定值缩放图像中的每个像素,或将颜色校正因子应用于每个通道。
2. 数组切片
数组切片允许您在不复制数据的情况下提取数组的片段。您可以使用 :
运算符来选择元素范围、跳过元素或反转数组。
1 2 3 4 5 6 |
import numpy as np arr = np.arange(10) sub = arr[2:7:2] print(sub) |
输出
1 |
[2 4 6] |
用例:从传感器数据中提取时间窗口,或在不进行不必要复制的情况下从视频中采样每 n 帧。
3. 花式索引
花式索引允许您使用索引列表或数组一次性访问多个数组元素,而不仅仅是单个切片。它对于重新排序、选择特定行/列或重复元素非常有用。
示例 1
1 2 3 4 5 6 |
import numpy as np arr = np.array([10, 20, 30, 40, 50]) indices = [0, 3, 4] print(arr[indices]) |
输出
1 |
[10 40 50] |
示例 2
1 2 3 4 5 6 7 8 |
import numpy as np # 使用 np.ix_() 选择行/列组合 matrix = np.arange(9).reshape(3, 3) rows = [0, 2] cols = [1, 2] print(matrix[np.ix_(rows, cols)]) |
输出
1 2 |
[[1 2] [7 8]] |
用例:从大型数据集中选择特定的客户 ID,或从实验中提取关键时间点。
4. 元素级运算
元素级运算用 NumPy 操作替换显式的 Python 循环,这些操作可以同时应用于整个数组。NumPy 的内部 C 实现使其比在 Python 中循环快得多。
1 2 3 4 5 6 7 |
import numpy as np x = np.arange(5) y = np.arange(5, 10) z = x * y print(z) |
输出
1 |
[ 0 6 14 24 36 ] |
用例:在没有显式 for 循环的情况下计算数千个坐标之间的距离。
5. 布尔索引
布尔索引允许您根据特定条件过滤数组。您创建一个布尔数组,其中每个元素为 True
或 False
,然后 NumPy 使用它从数据中选择元素。
1 2 3 4 5 6 |
import numpy as np arr = np.arange(10) mask = arr % 2 == 0 print(arr[mask]) |
输出
1 |
[ 0 2 4 6 8 ] |
用例:仅从数据集中选择高价值交易,或过滤掉特定年龄以上的患者。
6. 网格创建
网格创建有助于您为数学函数、模拟或可视化创建坐标网格。NumPy 的 meshgrid
和 mgrid
函数在不编写手动循环的情况下生成网格。
1 2 3 4 5 6 7 |
import numpy as np x = np.linspace(0, 1, 3) y = np.linspace(0, 1, 3) X, Y = np.meshgrid(x, y) print(X) |
输出
1 2 3 |
[[0 0.5 1. ] [0. 0.5 1. ] [0. 0.5 1. ]] |
用例:为绘制 3D 曲面生成 X 和 Y 坐标,或在网格上模拟粒子位置。
7. 随机数生成
NumPy 的 random
模块中的随机数生成提供了一种灵活的方式来从各种概率分布生成随机数。此功能对于模拟、测试和引导数据集等任务至关重要。
示例 1
1 2 3 4 |
import numpy as np rng = np.random.default_rng(42) print(rng.integers(1, 10, size=5)) |
输出
1 |
[1 7 6 4 4] |
示例 2
1 2 3 4 |
import numpy as np rng = np.random.default_rng(42) print(rng.random(3)) |
输出
1 |
[0.69736803 0.09417735 0.97562235] |
用例:为机器学习训练创建合成数据集,或在概率实验中模拟掷骰子。
结论
NumPy 使处理数字和数据更加快速和容易。借助广播、切片、花式索引和布尔索引等技巧,您可以事半功倍。网格创建和随机数工具有助于模拟、图形和测试。学习这些功能将为您节省时间并使您的代码更清晰。
暂无评论。