NumPy 中 np.c_ 的用法解析
NumPy 中 np.c_
的用法解析
np.c_
是 NumPy 用于沿列方向(第二轴)拼接数组的快捷工具,特别适用于将一维数组组合为二维数组的列。其核心功能是将输入数组按列堆叠,语法为 np.c_[array1, array2, ...]
。以下结合 ravel
后的 xx
和 yy
数组场景详细说明:
1. 基础用法:连接一维数组
假设 xx
和 yy
是两个一维数组(或通过 ravel()
展平后的数组):
import numpy as npxx = np.array([1, 2, 3])
yy = np.array([4, 5, 6])
combined = np.c_[xx, yy] # 沿列方向拼接
结果:
[142536] \begin{bmatrix} 1 & 4 \\ 2 & 5 \\ 3 & 6 \end{bmatrix} 123456
此时 combined
是一个 3×23 \times 23×2 的二维数组,每列对应原始数组。
2. 连接 ravel
后的数组
若 xx
和 yy
是二维数组(如网格矩阵),需先展平再连接:
# 生成网格坐标
x = np.linspace(0, 1, 3) # [0, 0.5, 1]
y = np.linspace(0, 1, 2) # [0, 1]
xx, yy = np.meshgrid(x, y) # xx.shape=(2,3), yy.shape=(2,3)# 展平后按列拼接
points = np.c_[xx.ravel(), yy.ravel()]
结果:
[000.5010010.5111] \begin{bmatrix} 0 & 0 \\ 0.5 & 0 \\ 1 & 0 \\ 0 & 1 \\ 0.5 & 1 \\ 1 & 1 \end{bmatrix} 00.5100.51000111
每行表示一个坐标点 (xi,yi)(x_i, y_i)(xi,yi),总行数 = xx.size
(或 yy.size
)。
3. 关键特性
- 自动维度提升:
若输入为一维数组,np.c_
自动将其视为列向量(形状(n,)
→(n,1)
)。 - 轴方向:
沿第二轴(列)拼接,等价于np.column_stack
,区别于行拼接的np.r_
。 - 长度匹配:
所有输入数组在展平后必须有相同长度,否则报错ValueError
。
4. 典型应用场景
- 机器学习数据集:将特征 XXX 和标签 yyy 合并为训练数据。
- 坐标生成:将网格坐标
xx
,yy
展平为点集(如绘图或空间计算)。 - 数据预处理:合并多个特征列(如
np.c_[feature1, feature2]
)。
5. 调试建议
若结果不符合预期:
- 检查输入数组维度:确保通过
xx.ravel()
展平为一维。 - 验证长度一致性:
len(xx.ravel()) == len(yy.ravel())
。 - 替代方案对比:
# 等效于 np.c_[xx, yy] np.column_stack((xx.ravel(), yy.ravel())) np.hstack((xx.ravel()[:, None], yy.ravel()[:, None])) # 显式转列向量
相关问题
np.c_
和np.r_
在拼接数组时有何本质区别?- 当输入数组维度不同时(如一维和二维),
np.c_
如何处理? - 如何用
np.concatenate
或np.hstack
实现np.c_
的功能?
: 引用基于 NumPy 官方文档中数组操作指南。