Python循环中存储不同长度numpy数组的方法咨询
保存循环中长度不固定的numpy数组(无需本地文件)
直接用Python的列表或字典就能实现,完全不需要写入本地文件,以下是几种实用方案:
方法1:列表存储所有数组
列表天然支持存储不同长度的元素,是最直接的选择:
import numpy as np # 初始化空列表用于存放所有数组 all_arrays = [] # 模拟循环读取文件(替换为你的实际文件读取逻辑) for _ in range(5): # 生成随机长度的数组,模拟从文件读取的结果 arr_length = np.random.randint(3, 10) current_arr = np.arange(arr_length) # 将当前数组加入列表 all_arrays.append(current_arr) # 后续使用示例:通过索引访问指定数组 print("第一个文件的数组:", all_arrays[0]) print("第三个数组的长度:", len(all_arrays[2]))
方法2:字典关联文件名与数组
如果需要对应每个数组的来源文件,用字典可以更清晰地映射关系:
import numpy as np # 初始化空字典 array_map = {} # 模拟你的文件列表 file_list = ["sample1.dat", "sample2.csv", "sample3.npy"] for file_name in file_list: # 模拟读取文件生成数组 arr_length = np.random.randint(3, 10) current_arr = np.random.rand(arr_length) # 以文件名为键,数组为值存入字典 array_map[file_name] = current_arr # 后续使用示例:通过文件名直接获取对应数组 print("sample2.csv对应的数组:", array_map["sample2.csv"])
方法3:numpy object数组存储
如果偏好使用numpy容器,可以创建dtype=object的numpy数组来容纳不同长度的子数组:
import numpy as np # 先收集所有数组到列表 temp_list = [] for _ in range(4): temp_arr = np.arange(np.random.randint(2, 8)) temp_list.append(temp_arr) # 转换为object类型的numpy数组 obj_array = np.array(temp_list, dtype=object) # 访问方式与普通numpy数组一致 print("第二个数组:", obj_array[1])
注意:object数组的运算逻辑和常规numpy数组有差异,若仅用于存储和读取,前两种方法更轻便高效。
内容的提问来源于stack exchange,提问作者JoeAA
相关产品推荐
相关产品推荐

