我有一个大小为(n*n
)的矩阵X,我想将其写入两个单独的二进制文件(即,满足条件的n / 2行必须转到文件,剩下的转到另一个) 。我把它写成以下代码:
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 :(得分:1)
posiResponse
和negaResponse
是列表。 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
模块中的pickle.dump
转储数据:
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 :(得分: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()