我在追加模式下使用numpy保存了一个大文件,即它可能包含5000个数组,每个数组都有形状,例如[1,224,224,3],就像这样:
filepath = 'hello'
for some loop:
...
with open(filepath, 'ab') as f:
np.save(f, ndarray)
我需要将数据加载到文件中,也许是所有数组,或者可能是以某种生成方式加载,例如读取前100个,然后读取下100个,依此类推。有什么方法可以正确执行此操作吗?现在,我只知道如果我使用np.load,每次只能得到一个数组,而且我也不知道如何读取100到199个数组。
loading arrays saved using numpy.save in append mode 这个问题是关于这个问题的,但似乎不是我想要的。
答案 0 :(得分:1)
一个解决方案虽然很丑陋,但只能获取文件中的所有数组(因此可能会出现内存不足错误),如下所示:
a = []
with open(filepath, 'rb') as f:
while True:
try:
a.append(np.load(f))
except:
break
np.stack(a)
答案 1 :(得分:1)
根据您的情况,这更像是骇客。
无论如何,这是在附加模式下使用np.save创建文件的文件:
import numpy as np
numpy_arrays = [np.array ([1, 2, 3]), np.array([0, 9])]
print numpy_arrays[0], numpy_arrays[1]
print type(numpy_arrays[0]), type(numpy_arrays[1])
for numpy_array in numpy_arrays:
with open ("./my-numpy-arrays.bin", 'ab') as f:
np.save(f, numpy_array)
[1 2 3] [0 9]
<type 'numpy.ndarray'> <type 'numpy.ndarray'>
...这是在循环时检查IOException(和其他错误)的代码。
with open ("./my-numpy-arrays.bin", 'rb') as f:
while True:
try :
numpy_array = np.load(f)
print numpy_array
except :
break
[1 2 3]
[0 9]
不是很漂亮,但是...有效。