Python中保存大型矩阵后读取遇MemoryError问题求助
解决NumPy读取大型矩阵时的MemoryError问题
问题描述
通过循环生成维度为(3324, 1, 24464)的NumPy矩阵bxx,使用numpy.savetxt保存为文本文件后,用numpy.loadtxt读取触发内存错误:
保存代码:
import numpy my_matrix = bxx numpy.savetxt('matrix.txt', my_matrix, delimiter = ',')
读取代码:
import numpy my_matrix = numpy.loadtxt(open("matrix.txt","rb"),delimiter=",",skiprows=0)
报错信息:
Traceback (most recent call last) ~\AppData\Local\Temp\ipykernel_11628\2774506594.py in <module> 6 #read file into a matrix 7 import numpy ----> 8 my_matrix = numpy.loadtxt(open("matrix.txt","rb"),delimiter=",",skiprows=0) ~\Anaconda3\envs\myenv\lib\site-packages\numpy\lib\npyio.py in loadtxt(fname, dtype, comments, delimiter, converters, skiprows, usecols, unpack, ndmin, encoding, max_rows, like) 1148 for x in read_data(_loadtxt_chunksize): 1149 if X is None: -> 1150 X = np.array(x, dtype) 1151 else: 1152 nshape = list(X.shape) MemoryError: Unable to allocate 620. MiB for an array with shape (3324, 1, 24464) and data type float64
解决办法
1. 改用NumPy原生二进制格式读写
文本格式存储效率极低,读取时内存占用大,换成.npy原生二进制格式能大幅降低内存压力,同时读写速度更快:
# 保存 numpy.save('matrix.npy', bxx) # 读取 my_matrix = numpy.load('matrix.npy')
.npy会自动保留数组的维度、数据类型等元信息,无需处理分隔符。
2. 降低数据类型精度
如果业务场景不需要float64的高精度,可将数组转成float32或float16,直接减少一半或四分之三的内存占用:
# 保存时转换类型 numpy.save('matrix_float32.npy', bxx.astype('float32')) # 读取后为float32类型 my_matrix = numpy.load('matrix_float32.npy')
注意:转换前确认精度损失在可接受范围内。
3. 分块读取文本文件
若必须使用文本格式,可逐块读取数据,避免一次性加载全部内容到内存:
import numpy as np # 自定义分块大小(根据可用内存调整) chunk_size = 1000 # 获取文件总行数 with open('matrix.txt', 'r') as f: total_rows = sum(1 for _ in f) # 逐块读取并拼接 chunks = [] for i in range(0, total_rows, chunk_size): chunk = np.loadtxt('matrix.txt', delimiter=',', skiprows=i, max_rows=chunk_size) chunks.append(chunk) my_matrix = np.concatenate(chunks).reshape((3324, 1, 24464))
4. 使用内存映射文件
针对超大型数组,用numpy.memmap创建内存映射,数据存放在磁盘而非全部加载到内存,访问时按需读取:
# 先将数组保存为二进制文件 bxx.tofile('matrix.bin') # 创建内存映射,指定数据类型和原数组形状 my_matrix = np.memmap('matrix.bin', dtype='float64', mode='r', shape=(3324, 1, 24464))
内容的提问来源于stack exchange,提问作者ely66
相关产品推荐
相关产品推荐

