如何在单个 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
。事实证明那不是真的。
最后一件事,感谢您如此巧妙地设置您的问题和示例。几乎没有人这样做。
我想保存和加载几个数组 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
。事实证明那不是真的。
最后一件事,感谢您如此巧妙地设置您的问题和示例。几乎没有人这样做。