2017-07-19 50 views
0

我想要寫入兩個單獨的二進制文件(即,滿足條件的行的n/2個必須到達文件,並且必須將該矩陣的大小設爲(n*n)留給另一個)。我寫的如下面的代碼:向二進制文件寫入列表時出現

def write_to_binary_file(X, y): 
    posiResponse = [] 
    negaResponse = [] 
    for idx, res in enumerate(y): 
     if res == 1: 
      posiResponse.extend(X[idx]) 
     else: 
      negaResponse.extend(X[idx]) 

    with open("POS.bin", mode='wb') as file1: 
     file1.write(bytearray(posiResponse)) 
    file1.close() 
    with open("NEG.bin", mode='wb') as file2: 
     file2.write(bytearray(negaResponse)) 
    file2.close() 

我得到的抱怨陣列和如何我用bytearray()但我不知道如何調整它的錯誤:

Traceback (most recent call last): 
    File "exper.py", line 173, in <module> 
    write_data(X, y) 
    File "exper.py.py", line 47, in write_data 
    file1.write(bytearray(posiResponse)) 
TypeError: an integer or string of size 1 is required 

請,可有人提供了一個很好的修復謝謝。

+0

你想寫一個numpy的陣列到一個二進制文件?你關心它是如何完成的? –

回答

1

posiResponsenegaResponse是列表。 Numpy有一些方法可以讓你輕鬆地寫入文件。下面是使用np.ndarray.tofile一個辦法:

def write_to_binary_file(X, y): 
    ... # populate posiResponse and negaResponse here 

    np.array(posiResponse).tofile('POS.bin') 
    np.array(negaResponse).tofile('NEG.bin') 

或者,您可以保留這些數據結構的列表,然後使用pickle.dumppickle模塊來轉儲你的數據:

import pickle 
def write_to_binary_file(X, y): 
    ... # populate posiResponse and negaResponse here 

    pickle.dump(posiResponse, open('POS.bin', 'wb')) 
    pickle.dump(negaResponse, open('NEG.bin', 'wb')) 
+1

非常感謝。 – Medo

0

或者改爲@ COLDSPEED的回答你可以使用numpy.save

def write_to_binary_file(X, y): 
    posiResponse = [] 
    negaResponse = [] 
    for idx, res in enumerate(y): 
     if res == 1: 
      posiResponse.extend(X[idx]) 
     else: 
      negaResponse.extend(X[idx]) 
    np.save('POS', posiResponse) 
    np.save('NEG', negaResponse) 

不幸的是,它會添加擴展名npy

之後,你可以加載列表回爲:

posiResponse = np.load('POS.npy').tolist()