如何将多个CSV文件生成的2D数组高效合并为3D NumPy数组?
解决方法:用NumPy的堆叠函数实现更Pythonic的三维数组合并
嘿,这个需求我太熟悉了!你遇到的问题本质是np.concatenate和np.stack(或直接用np.array())的区别——前者是在已有轴上拼接,后者会新增一个维度来堆叠数组,正好匹配你要的三维结构。
方案1:用np.stack()直接堆叠生成器中的数组
np.stack()专门用于将多个形状相同的数组沿新轴堆叠,完全符合你的需求。因为你的生成器dtx每个元素都是3×5的数组,直接传入np.stack()就能得到N×3×5的三维数组(N是文件数量):
import numpy as np import pandas as pd # 你的原有生成器 dtx = (pd.read_csv(f).values for f in get_filelist(datadirectory)) # 直接堆叠成三维数组 final_array = np.stack(dtx)
方案2:用np.array()转换生成器列表
另一种更简洁的写法是把生成器转成列表后直接传入np.array(),NumPy会自动识别数组的形状并堆叠成三维结构:
final_array = np.array(list(dtx))
为什么np.concatenate达不到预期?
你之前尝试的np.concatenate([tf for tf in dtx])会把所有3×5的数组沿第一个轴(axis=0)拼接,最终得到3N×5的二维数组,而不是三维。这是因为concatenate不会新增维度,只会在已有轴上扩展——如果想要用它实现三维,你需要先给每个数组增加一个维度(比如用tf[np.newaxis, ...]),再拼接,但这显然不如上面两种方案简洁。
额外提示
如果你的文件数量很大,生成器的方式很节省内存——两种方案都是按需读取文件并处理,不会一次性把所有DataFrame都加载到内存里,很适合大数据场景。
内容的提问来源于stack exchange,提问作者dearn44
相关产品推荐
相关产品推荐

