如何在循环中沿新维度堆叠形状为(2,9,38)的Numpy数组?
解决方案
你的问题出在每次循环使用np.stack时,都会改变数组的维度结构,导致后续堆叠时形状不匹配:
- 第一次循环前,
Pint_data形状是(2,9,38) - 第一次
np.stack后,得到的数组形状是(2,2,9,38)(默认沿axis=0堆叠) - 第二次循环加载的新数组还是
(2,9,38),和当前Pint_data形状不一致,自然报错
下面给两种可行的解决方法:
方法一:先收集所有数组,最后一次性堆叠(推荐)
这种方法更高效也更简洁,先把所有数组加载到列表中,最后统一沿指定轴堆叠:
import numpy as np # 初始化列表存储所有加载的数组 Pint_list = [] for file_path in files_npy: # 逐个加载数组并添加到列表 arr = np.load(file_path) Pint_list.append(arr) # 沿第4个维度(axis=3)堆叠,得到形状(2,9,38,x)的数组 Pint_data = np.stack(Pint_list, axis=3)
方法二:循环中逐步扩展维度并拼接
如果必须在循环中逐步构建数组,可以每次给新加载的数组扩展一个维度,再沿目标轴拼接:
import numpy as np # 加载第一个数组并扩展维度,变成(2,9,38,1) Pint_data = np.expand_dims(np.load(files_npy[0]), axis=3) for file_path in files_npy[1:]: # 加载新数组并同样扩展维度 Pint_data_temp = np.expand_dims(np.load(file_path), axis=3) # 沿第4个维度拼接,保持形状一致 Pint_data = np.concatenate([Pint_data, Pint_data_temp], axis=3)
两种方法最终都会得到你需要的(2,9,38,x)形状的数组,其中x是files_npy的元素总数。
内容的提问来源于stack exchange,提问作者Philipp J
相关产品推荐
相关产品推荐

