2017-07-19 82 views
0

当试图numpy的矩阵M写入二进制文件为:NumPy的不创建二进制文件

from io import open 
X = [random.randint(0, 2 ** self.stages - 1)for _ in range(num)] 
Matrix = np.asarray([list(map(int, list(x))) for x in X]) 

file_output = open('result.bin', 'wb') 
M = np.ndarray(Matrix, dtype=np.float64) 
file_output.write(M) 
file_output.close() 

我得到这个错误:

Traceback (most recent call last): 
    File "experiments.py", line 164, in <module> 
    write_data(X, y) 
    File "experiments.py", line 39, in write_data 
    arr = np.ndarray(Matrix, dtype=np.float64) 
ValueError: sequence too large; cannot be greater than 32 

我能知道如何解决这一问题?谢谢

+0

请先修复您的代码(例如文件名)。 – patrick

+0

你忘了打开一个字符串。请先解决。 –

+0

哦!谢谢 。但仍然有相同的问题 – Medo

回答

1

您可以通过以下两种等价方式之一进行:

import numpy as np 

a = np.random.normal(size=(10,10)) 
a.tofile('test1.dat') 

with open('test2.dat', 'wb') as f: 
    f.write(a.tobytes()) 

# diff test1.dat test2.dat 

请参阅该文档为tofile。但是从最初的例子来看,它看起来像Matrix未能转换成ndarray

1

替换:

M = np.ndarray(Matrix, dtype=np.float64) 

M = Matrix.astype(np.float64) 

np.array(Matrix, dtype=np.float64)也将工作,但astype更简单。

我在重新创建您的Matrix变量时遇到了一些问题。它的形状是什么?

np.save是将多维数组保存到文件的最佳方式。还有其他方法,但它们不保存形状和dtype信息。


ndarray因为第一(位置)参数应该是形状,而不是另一个阵列是错误的。 buffer参数中提供了数据(如果有)。初学者或高级numpy用户通常不会使用ndarray


什么是Matrix应该是。当我尝试你的代码与一对夫妇的参数,我在map一步得到一个错误:

In [495]: X = [np.random.randint(0, 2 ** 2 - 1)for _ in range(4)] 
    ...: Matrix = np.asarray([list(map(int, list(x))) for x in X]) 
    ...: 
-----> 2 Matrix = np.asarray([list(map(int, list(x))) for x in X]) 
.... 
TypeError: 'int' object is not iterable 
In [496]: X 
Out[496]: [1, 2, 1, 0] 

X只是一个数字列表?不是某种数组列表?为什么Matrix一步?它试图将列表的嵌套列表转换为整数?即使randint已经创建整数?那么你按照转换为float