我使用一个web服务,通过AWS上的朱庇特笔记本来训练我的一些深度学习模型。出于成本原因,我希望将数据作为.npz文件存储在自己的服务器上,并将其直接加载到远程计算机的内存中。
np.load()函数不适用于http链接,而且使用urlretrieve无法使其工作。我只让它使用wget下载数据,然后从本地路径加载文件。然而,这并不能完全解决我的问题。
有什么建议吗?
发布于 2018-01-20 11:28:06
问题是,如果np.load的第一个参数是一个类似文件的对象,那么它必须是seek-able:
file:类似文件的对象、字符串或pathlib.Path要读取的文件.类似文件的对象必须支持File()和read()方法。经过腌制的文件要求类似文件的对象也支持readline()方法。
如果您要通过http提供这些文件,并且您的服务器支持Range头,您可以使用这个answer中提供的实现(Python2),例如:
F = HttpFile('http://localhost:8000/meta.data.npz')
with np.load(F) as data:
a = data['arr_0']
print(a)或者,您可以获取整个文件,创建一个内存中类似文件的对象并将其传递给np.load。
from io import BytesIO
import numpy as np
import requests
r = requests.get('http://localhost:8000/meta.data.npz', stream = True)
data = np.load(BytesIO(r.raw.read()))
print(data['arr_0'])https://stackoverflow.com/questions/48355140
复制相似问题