![CleanShot 2025-05-02 at [email protected]|1000](https://imagehosting4picgo.oss-cn-beijing.aliyuncs.com/imagehosting/fix-dir%2Fmedia%2Fmedia_jzOmk6moae%2F2025%2F05%2F02%2F01-13-39-7cf6eebd668b80f9b99970571048771e-CleanShot%202025-05-02%20at%2001.12.36-2x-627d49.png) axis0是填横条的那些格子(按列计算),1 是填竖条的那些格子(按行计算) #第一性原理 numpy 广播机制的本质是通过按照类似 excel 的智能扩展的思想,在矩阵乘法中,快速把维度对不上的那个小矩形,智能扩展到对得上维度 # 核心定位一眼看 | 维度 | **NumPy** | **pandas** | | ---------- | --------------------------- | --------------------------- | | | 本质是矩阵,是纯粹的张量 | 和 excel 一样,啥都能装的表格 | | **关注点** | _高性能、同质、数值数组_ | _带索引的异质表格数据_ | | **主要数据结构** | `ndarray`—任意维度、元素类型一致 | `Series`(一维)`DataFrame`(二维)| | **典型场景** | 线性代数、信号处理、深度学习底层张量 | 数据清洗、统计分析、商业报表 | | **缺省索引** | 位置索引(0 … n-1)| 显式行列标签,可自动对齐 | | **缺失值** | 没有语义层支持,需用 `np.nan`、掩码等手动处理 | 内置缺失值标记、填补、丢弃、对齐 | | **运算习惯** | 向量化数值运算、广播、u-func | 分组聚合、时间序列重采样、透视表 | > **一句话**:**NumPy 是“高维数字矩阵库”,pandas 是“带索引的表格分析库”,后者底层就用到了前者的数组。** # 快速选型指南 > **先问自己:数据像“矩阵”还是“表格”?** > > - **矩阵/张量** ➜ 用 **NumPy**:高性能数学运算、可 GPU 化。 > > - **表格/记录** ➜ 用 **pandas**:索引 + 缺失值 + 分组聚合。 > 如果仍拿不准,可以先用 pandas 做清洗,最后 `.values` / `.to_numpy()` 交给 NumPy 或深度学习框架;这也是大多数数据科学流程的默认路线。 ```py import numpy as np import matplotlib.pyplot as plt t = np.linspace(0, 1, 1000, endpoint=False) x = np.sin(2*np.pi*50*t) + 0.5*np.sin(2*np.pi*120*t) X = np.fft.fft(x) freqs = np.fft.fftfreq(len(t), d=t[1]-t[0]) plt.plot(freqs[:500], np.abs(X)[:500]) # 显示前半谱 plt.title("50 Hz + 120 Hz 频谱") plt.show() ``` _FFT_(Fast Fourier Transform) 以下 **NumPy 高频 API Cheatsheet** 汇总了上面教程中用到的常见函数(含属性)和典型用法,便于快速查阅。表格按功能分区,示例均假设已 `import numpy as np`。 # 1. 数组创建与基本属性 |API / 属性|作用|典型示例| |---|---|---| |`np.array(obj)`|将列表/元组等转成 `ndarray`|`np.array([1,2,3])`| |`np.zeros(shape)` / `np.ones(shape)`|生成全 0 / 全 1 数组|`np.zeros((2,3))`| |`np.full(shape, val)`|生成填充常数的数组|`np.full((2,2), 7)`| |`np.arange(start, stop, step)`|等差序列|`np.arange(0,10,2)` → `[0 2 4 6 8]`| |`np.linspace(start, stop, num)`|均分序列|`np.linspace(0,1,5)`| |`arr.shape / arr.ndim / arr.size`|形状、维度数、元素总数|`arr.shape → (3,4)`| |`arr.dtype`|数据类型|`arr.dtype → float64`| # 2. 索引、切片与布尔筛选 先行i,后列 j |API / 语法|作用|示例| |---|---|---| |`arr[i]/ arr[i,j]`|基本索引|`arr[1,2]`| |`arr[start:stop:step]`|切片|`arr[::2]`| |`arr[:, -1]`|所有行最后一列|| |`mask = arr > 0`|生成布尔掩码|| |`arr[mask]`|布尔索引筛选|`arr[arr%2==0]`| |`arr[mask]= val`|条件赋值|`arr[arr<0]=0`| # 3. 形状变换与拼接拆分 |API|作用|示例| |---|---|---| |`arr.reshape(new_shape)`|不拷贝重塑|`arr.reshape(2,3)`| |`arr.ravel()` / `arr.flatten()`|展平成 1 维(`flatten` 返回拷贝)|| |`arr.T`|转置|`A.T`| |`np.concatenate((a,b), axis)`|任意轴拼接|`np.concatenate((A,B),1)`| |`np.vstack((a,b))` / `np.hstack((a,b))`|竖直 / 水平拼接|| |`np.split(arr, n, axis)`|等分拆分|`np.split(X,2,0)`| |`np.vsplit` / `np.hsplit`|按行/列拆分|| # 4. 广播与逐元素运算 |API / 运算符|作用|示例| |---|---|---| |`+ - * /`|逐元素算术(支持广播)|`arr + 5`, `A * B`| |`np.sqrt(arr)`、`np.sin(arr)` 等 ufunc|通用函数|`np.log(arr)`| |**广播规则**|小维度扩展匹配大维度|`arr + row_vec`| # 5. 聚合统计 |API|作用|典型示例| |---|---|---| |`arr.sum(axis=None)`|求和(`axis=None` 时全部元素)|`arr.sum(0)` 每列和| |`arr.mean(axis)`|均值|`arr.mean(1)` 每行均值| |`arr.min/max(axis)`|极值|`arr.max()`| |`arr.std(axis)`|标准差|| |`np.prod`, `np.cumsum`, `np.cumprod`|乘积、累加、累乘|| # 6. 随机数生成(`np.random` 子模块) |API|作用|示例| |---|---|---| |`np.random.seed(s)`|设定随机种子|`np.random.seed(42)`| |`np.random.rand(d0, …)`|均匀分布 `[0,1)`|`np.random.rand(3,3)`| |`np.random.randn(d0, …)`|标准正态分布|`np.random.randn(100)`| |`np.random.randint(low, high, size)`|随机整数 `[low, high)`|`np.random.randint(0,10,5)`| |`np.random.choice(seq, size, replace)`|随机抽样|`np.random.choice([1,2,3],2)`| # 7. 线性代数(`np.linalg`) | API / 运算符 | 作用 | 示例 | | --------------------------------- | ------- | -------------------------- | | `@` / `np.matmul(A,B)` / `np.dot` | 矩阵乘法 | `C = A @ B` | | `np.linalg.inv(A)` | [[矩阵逆]] | `A_inv = np.linalg.inv(A)` | | `np.linalg.det(A)` | 行列式 | `np.linalg.det(A)` | | `np.eye(n)` | 单位矩阵 | `I = np.eye(3)` | | ` A.T` | 矩阵转置 | | --- > **使用贴士** > > - **查看帮助**:在交互式环境用 `np.func?` 或 `help(np.func)` 快速查看文档。 > > - **性能优化**:尽量用矢量化运算和广播,避免 Python 循环。 > > - **避免不必要复制**:`reshape`、切片默认返回视图;只有在需要独立副本时用 `copy()` 或 `flatten()`。 > 拿着这份 Cheatsheet,就可以更高效地回忆和使用 NumPy 的核心 API 了。祝你编码顺利!