我使用Web服务通过AWS上的Jupyter Notebook训练我的一些深度学习模型。出于成本原因,我想将我的数据作为.npz
文件存储在我自己的服务器上,并将它们直接加载到我的远程机器的内存中。
np.load()
功能不适用于http
个链接并使用urlretrieve
我无法使其正常工作。我只使用wget
下载数据,然后从本地路径加载文件。但是,这并不能完全解决我的问题。
有什么建议吗?
答案 0 :(得分:1)
问题是,如果np.load
的第一个参数是类似文件的对象,则它必须是seek
- 能够:
file
:类文件对象,字符串或pathlib.Path要读取的文件。 类文件对象必须支持seek()和read()方法。雪菜 文件要求类文件对象支持readline()方法 同样。
如果要通过http
提供这些文件,并且您的服务器支持Range
标头,则可以使用此answer中提供的实现(Python 2),例如:
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'])