2017-11-30 5 views
1

が、私はその後、 のPythonのgzipモジュールはUBYTEファイルで期待どおりに

import numpy as np 

def read_ubyte(self, fname): 
    with open(fname, 'rb') as flbl: 
     magic, num = struct.unpack(">II", flbl.read(8)) 
     lbl = np.fromfile(flbl, dtype=np.int8) 
    return magic, num, lbl 

if __name__ == "__main__": 
    print(read_ubyte("train-labels-idx1-ubyte")) 

を実行

import gzip 
import numpy as np 

def read_ubyte(self, fname): 
    with gzip.open(fname, 'rb') as flbl: 
     magic, num = struct.unpack(">II", flbl.read(8)) 
     lbl = np.fromfile(flbl, dtype=np.int8) 
    return magic, num, lbl 

if __name__ == "__main__": 
    print(read_ubyte("train-labels-idx1-ubyte.gz")) 

gunzip train-labels-idx1-ubyte.gzをやって最初のとまったく同じように機能するために、次のコードを期待動作しませんが、それはしません、最初のコードは、出力を与える:

(2049, 60000, array([ 0, 3, 116, ..., -22, 0, 0], dtype=int8)) 

及び第

(2049, 60000, array([5, 0, 4, ..., 5, 6, 8], dtype=int8)) 

なぜですか?

注1:第二は、(無gzipモジュールの使用で)右の出力である

注2:あなたがしたい場合は、次の番号2049と60000は

注3右ですhttp://yann.lecun.com/exdb/mnist/

答えて

2

ファイルをダウンロードすることができます。NumPyとGZipはファイルオブジェクトのセマンティクスについて意見が異なります。 NumPyの一部(np.load()など)に対応するknown issueですが、fromfile()には該当しません。これを回避するには

(のみgzip場合には必要ですが、両方で動作します):

lbl = np.fromstring(flbl.read(), dtype=np.int8) 
関連する問題