numpy.savetxt正确用法及3D数组存储ValueError报错解决
问题原因
报错有两个核心诱因:
np.savetxt仅支持保存1D/2D数值数组,你将master_configs和master_evols打包后生成的是3D数组,直接触发维度校验错误。- 你示例中的
ar数组内部子数组维度不一致(第一组子数组长度为3,第二组为4),numpy会自动将其转为object类型数组,savetxt无法解析非数值类型的数组对象。
此外原有代码还存在隐藏bug:初始master_configs是列表类型,首次加载txt成功后会变成numpy数组,后续执行append操作会直接抛出属性错误,numpy数组无内置append方法。
解决方案
方案1:使用txt存储(适配原有读写逻辑)
将每组配置和对应结果拼接为单行数据,把整个数据集转为2D结构,同时使用追加模式写入,无需每次读取全量文件,效率更高:
import numpy as np import random def combine_shuffle_test(n): #generating data a, b = [], [] for i in range(random.randint(0,5)): a.append(np.random.normal(0,1,8)) b.append(np.random.normal(0,1,9)) return a,b save_path = 'master_results.txt' for i in range(2): fil_cfgs, fil_res_evol = combine_shuffle_test(100) # 单条数据结构:8位配置 + 9位结果,拼接为17维向量 batch_data = np.array([np.concatenate([cfg, res]) for cfg, res in zip(fil_cfgs, fil_res_evol)]) # 追加模式写入,首次运行创建文件,后续直接追加新数据 with open(save_path, 'ab') as f: np.savetxt(f, batch_data, fmt='%1.6f', delimiter=', ') # 读取时直接拆分配置和结果即可 all_data = np.loadtxt(save_path, delimiter=', ') master_configs = all_data[:, :8] master_evols = all_data[:, 8:]
方案2:使用numpy原生npz格式(更高效)
如果不需要直接读取txt明文内容,使用npz格式可以完美兼容多维数组、维度不一致的object数组,读写速度远高于txt,且不需要修改原有数据结构:
import numpy as np import random def combine_shuffle_test(n): #generating data a, b = [], [] for i in range(random.randint(0,5)): a.append(np.random.normal(0,1,8)) b.append(np.random.normal(0,1,9)) return a,b save_path = 'master_results.npz' master_configs = [] master_evols = [] for i in range(2): # 读取历史存档 try: old_data = np.load(save_path, allow_pickle=True) master_configs = old_data['configs'].tolist() master_evols = old_data['evols'].tolist() except: pass fil_cfgs, fil_res_evol = combine_shuffle_test(100) master_configs.extend(fil_cfgs) master_evols.extend(fil_res_evol) # 保存全量数据,允许pickle存储object类型数组 np.savez(save_path, configs=np.array(master_configs, dtype=object), evols=np.array(master_evols, dtype=object)) # 读取数据 data = np.load(save_path, allow_pickle=True) master_configs = data['configs'] master_evols = data['evols']
内容的提问来源于stack exchange,提问作者nuwe
相关产品推荐
相关产品推荐

