如何在单个 url 中保存和加载多个 NumPy 数组?

How can I save and load multiple NumPy arrays at a single url?

我想保存和加载几个数组 to/from 一个存储在 URL 的文件。

这是我保存文件的方式:

    import numpy as np
    x=np.array([1,2,3])
    y=np.array([4,5,6])
    np.savez('./Test.npz',x=x,y=y)

然后就可以成功从本地目录加载数据了:

    data=np.load('./Test.npz', allow_pickle=True)
    print(data['x'],data['y'])

以下是我尝试从指向同一文件的 URL 加载它的方法:

ds=np.DataSource()
DataUrl='https://www.dropbox.com/s/1vpn5k3gt41nhtn/Test.npz'
DataFile = ds.open(DataUrl)
data = np.load(DataFile, allow_pickle=True)

我也试过:

!wget -nc 'https://www.dropbox.com/s/lm5ejwf7wzo1e58/SpikeCounts112Neuron12Thetas.npz'
np.load(DataFile, allow_pickle=True)

在这两种情况下,我都会收到以下错误:

----> 3 np.load(DataFile, allow_pickle=True)

/opt/anaconda3/lib/python3.7/site-packages/numpy/lib/npyio.py in load(file, mmap_mode, allow_pickle, fix_imports, encoding)
    437         # If the file size is less than N, we need to make sure not
    438         # to seek past the beginning of the file
--> 439         fid.seek(-min(N, len(magic)), 1)  # back-up
    440         if magic.startswith(_ZIP_PREFIX) or magic.startswith(_ZIP_SUFFIX):
    441             # zip-file (assume .npz)

UnsupportedOperation: can't do nonzero cur-relative seeks

我做错了什么?从单个 URL 加载多个 NumPy 数组的合理方法是什么?

我认为您只需提供 np.load 文件名,而不是打开的 DataSource 对象。这似乎有效:

import numpy as np

url = "https://www.dropbox.com/s/1vpn5k3gt41nhtn/Test.npz"
file = np.DataSource().open(url)
data = np.load(file.name)

现在 data['x']array([1, 2, 3])data['y']array([4, 5, 6])

顺便说一下,我学到了一些东西。我认为要从 Dropbox 中获取一个漂亮的普通文件,您必须在 URL 的末尾添加 ?raw=1。事实证明那不是真的。

最后一件事,感谢您如此巧妙地设置您的问题和示例。几乎没有人这样做。