如何对shape为(50,100,100)的NumPy数组展平最后两个维度?
NumPy数组展平最后两个维度的高效方案
针对形状为(50, 100, 100)的NumPy数组,要将最后两个维度展平为(50, 10000),最简洁高效的方案是用NumPy原生方法,完全不需要依赖列表生成器(后者会引入Python循环开销,效率更低)。
推荐方法:reshape
reshape是最优选择,它可以在不复制数据的情况下返回数组视图(如果原数组内存布局连续),性能拉满,写法也极简:
import numpy as np # 示例数组 arr = np.random.rand(50, 100, 100) # 展平最后两个维度,-1让NumPy自动计算维度大小 flattened_arr = arr.reshape(arr.shape[0], -1)
也可以直接写死目标形状:arr.reshape(50, 10000),但用-1更灵活——哪怕后续前两个维度的数值变化,代码也不用修改。
备选方法:ravel
如果需要先展平整个数组再重新塑形,ravel也是高效选项(默认返回视图):
flattened_arr = arr.ravel().reshape(50, -1)
不过这个写法比直接用reshape多一步,优先级稍低。
为什么不用列表生成器?
比如np.array([x.flatten() for x in arr])这种写法,会在Python层面循环遍历每个子数组,不仅代码冗余,还会因为Python循环的开销导致运行速度远慢于NumPy原生的C实现方法,完全没必要。
内容的提问来源于stack exchange,提问作者crn4t
相关产品推荐
相关产品推荐

