尝试将numpy矩阵M
写入二进制文件时:
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 :(得分: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 :(得分: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
参数中提供了数据(如果有)。 ndarray
通常不会被初学者或高级numpy用户使用。
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
?