如何保存并堆叠for循环迭代输出?numpy数组垂直堆叠求助
解决方法:收集迭代结果再垂直堆叠
你需要先创建一个空列表来存储每次循环生成的fdata,等所有迭代完成后,再用numpy.vstack()把列表里的数组一次性堆叠起来。具体步骤如下:
步骤1:初始化存储结果的列表
在所有循环开始之前,定义一个空列表,用来保存每次迭代输出的(1,3)数组:
import numpy as np # 建议用np缩写更简洁 results = [] # 空列表,用来收集每次的fdata
步骤2:每次迭代后将结果加入列表
在你的循环内部,生成fdata之后,把它添加到results列表中:
for i in range(2): for j in range(i, 2): yparam = The_path / ("{}_Y{}{}.csv".format('Filter', i+1, j+1)) with open(yparam, 'r', newline='') as Y_parameter_Data: data = np.loadtxt(Y_parameter_Data, skiprows=1, delimiter=',') ypar = [] # 注意这里原来的len(3)是错误的,应该直接写range(3) for k in range(3): a = np.reshape(data[k,1::2], (1,1)) b = np.reshape(data[k,2::2], (1,1)) ypar.append(a + j*b) fdata = np.array(ypar).reshape(1, -1) # 简化写法 # 把当前迭代的fdata加入结果列表 results.append(fdata)
步骤3:最终堆叠生成目标数组
所有循环结束后,用np.vstack()把列表里的所有数组垂直堆叠:
final_array = np.vstack(results) print(final_array.shape) # 应该输出(3,3),符合你的需求
额外小提示
- 你代码里的
for k in range(0, len(3))是语法错误,len()函数只能用于可迭代对象,直接写range(3)就能循环3次,生成3个元素组成(1,3)的数组。 - 可以简化
fdata的生成代码,直接用np.array(ypar).reshape(1, -1)替代多步赋值,让代码更简洁。
内容的提问来源于stack exchange,提问作者Hey There
相关产品推荐
相关产品推荐

