我想將多個陣列保存到/從存盤在 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 陣列的合理方法是什么?
uj5u.com熱心網友回復:
我認為您只需要提供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 中獲得一個不錯的純檔案,您必須?raw=1在 URL 的末尾加上。事實證明這不是真的。
最后一件事,非常感謝您很好地設定您的問題和示例。幾乎沒有人這樣做。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/458932.html
上一篇:urllib.request.urlretrieve從instagram下載錯誤的檔案
下一篇:從字典中獲取一部分
