是否存在类似numpy.split的方法,返回numpy.ndarray而非列表?
解决方案
当数组可以被均匀分割时,**直接使用numpy.reshape**就能实现你要的效果,无需用np.split再堆叠,性能更优(因为reshape在内存连续时是视图操作,不复制数据)。
一维数组示例
针对你给出的场景:
import numpy as np x = np.arange(9.0) # 直接reshape为(分割份数, 每份元素数),用-1让numpy自动计算每份的元素数 print(x.reshape(3, -1)) # 输出: # array([[0., 1., 2.], # [3., 4., 5.], # [6., 7., 8.]])
更高维数组的分割场景
如果是多维数组,比如要把形状为(6, 4)的二维数组按行分割成3份(每份2行),可以直接调整形状为(3, 2, 4):
arr = np.arange(24).reshape(6, 4) split_arr = arr.reshape(3, 2, 4) print(split_arr.shape) # (3, 2, 4)
如果需要调整轴的顺序来匹配需求,比如把列分割后转为行排列的二维数组:
# 将(6,4)数组按列分割为4份,重组为(4,6)的数组 split_col_trans = arr.T.reshape(4, 6).T
为什么不用np.split?
np.split返回列表是因为它支持不均匀分割,而均匀分割的场景下,reshape是更高效的选择——它不需要创建多个子数组再堆叠,直接通过修改数组的形状元数据实现,性能远高于np.split + np.stack的组合。
内容的提问来源于stack exchange,提问作者Monolith
相关产品推荐
相关产品推荐

