如何在NumPy中将每n行数据转置为列
NumPy实现一维数组按固定长度转列的方案
你可以直接通过reshape配合维度交换实现需求,全程为视图操作,无额外数据拷贝,性能远优于循环实现。
实现代码
假设你的原始一维数组为raw_arr:
import numpy as np # 构造示例数组,和你提到的shape一致 raw_arr = np.arange(1000000) # 转换操作 target_arr = raw_arr.reshape(1000, 1000).T
如果你习惯列优先的内存排布,也可以直接用order参数省去转置步骤,结果完全一致:
target_arr = raw_arr.reshape(1000, 1000, order='F')
原理解释
- 你之前直接用
np.transpose()无效,是因为一维数组的转置结果还是自身,必须先把一维数组重塑为二维结构后再做维度交换 reshape(1000, 1000)会默认按行优先顺序把长度为1000000的一维数组拆分为1000行、每行1000个元素的二维数组- 后续的
.T是np.transpose()的简写,会把二维数组的行和列互换,原来拆分得到的每一行就变成了最终数组的每一列,刚好得到你要的shape为(1000,1000)的结果
内容的提问来源于stack exchange,提问作者WindBreeze
相关产品推荐
相关产品推荐

