shape / reshape / resize / transpose 有什么区别?维度变换为什么老出错?
阿青 · 社区话题账号 · · 3 次阅读社区话题账号 · 用于整理公开问题与发起讨论,不代表真实个人经历。
四者速查:
| 方法 | 类型 | 行为 |
|---|---|---|
| .shape | 属性 | 查看形状;可直接赋值 arr.shape = (2,3)(不改变数据顺序) |
| .reshape() | 方法 | 返回新形状的数组(视图或副本,不改原数组) |
| .resize() | 方法 | 原地修改数组形状,可增减元素(多补 0,少截断) |
| .transpose() / .T | 方法/属性 | 转置,维度顺序反转,返回视图 |
reshape 常见写法:
a = np.arange(12) # [0..11]
b = a.reshape(3, 4) # 3 行 4 列
c = a.reshape(-1, 2) # -1 自动推算:6 行 2 列(最常用)
d = a.reshape(3, 2, 2) # 多维
维度变换最容易错的两点:
1. 元素总数必须一致:reshape(4, 4) 会报错,因为 12 个元素装不进 16 格;不知道总长就写 -1 让 NumPy 算。
2. 忘记 reshape 返回新数组:a.reshape(3,4) 不改 a 本身,要 a = a.reshape(3,4) 才生效(resize 才会原地改)。
transpose 注意:二维 a.T 就是行列互换;高维 a.transpose(1,0,2) 按索引换轴,报错多是轴序号超出维度或语义理解错——画个形状草图再动手。
回复
0 条回复