Numpy ndArray调用flatten()无法扁平化问题求助
问题原因解析
你的mat_data本质是dtype为object的一维numpy数组,里面每个元素都是独立的(20,8)数值型数组,并非预期的三维数值型数组,这就是两种方法结果差异的核心原因:
关于
flatten()无效:flatten()的作用是将多维数组展平为一维,但你的数组本身已经是(500,)的一维结构。对于object类型数组,它只会处理数组的外层维度,不会递归拆解每个元素内部的数组结构,所以调用后数组形状完全不变,每个元素还是原来的(20,8)数组。关于
np.concatenate(mat_data).ravel()有效:np.concatenate()会把传入的多个数组(即mat_data里的500个(20,8)数组)沿着默认轴(axis=0)拼接,得到(500*20, 8) = (10000,8)的二维数值型数组。之后调用ravel()将这个二维数组展平为一维,最终实现完全扁平化。
另外补充一种更贴合你预期的写法:可以先用np.stack(mat_data)把object数组转成目标(500,20,8)三维数组,之后再用flatten()或ravel()就会正常生效:
mat_data_3d = np.stack(mat_data) print(mat_data_3d.shape) # 输出 (500,20,8) mat_data_flat = mat_data_3d.flatten()
内容的提问来源于stack exchange,提问作者akaBryan
相关产品推荐
相关产品推荐

