当前位置: 首页 > 知识库问答 >
问题:

Numpy不创建二进制文件

党佐
2023-03-14

尝试将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

我能知道怎么解决这个问题吗?非常感谢。

共有2个答案

施昊然
2023-03-14

替换:

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

M = Matrix.astype(np.float64)

np。数组(Matrix,dtype=np.float64)也可以工作,但是astype更简单。

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

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

ndarray是错误的,因为第一个(位置)参数应该是形状,而不是另一个数组。缓冲区参数中提供了数据(如果有)ndarray通常不被初学者甚至高级numpy用户使用。

矩阵应该是什么。当我用几个参数尝试你的代码时,我在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只是一个数字列表吗?不是某种数组列表吗?为什么要使用矩阵步骤?它是否试图将嵌套列表转换为整数?即使randint已经创建了整数?然后,您将转换为浮点

糜正业
2023-03-14

您可以通过以下两种等效方法之一来实现:

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

 类似资料:
  • 如何创建一个预Compiled二进制框架,类似于在这个git repo上使用cloud firestore所做的事情:https://github.com/invertase/firestore-ios-sdk-frameworks 谢谢!

  • 我有以下代码: 如何打开这个二进制文件并检查是否确实写入了整数10

  • 问题内容: 我有一个数组: 我想创建的另一个数组和其唯一的元素为x。 我已经试过这段代码: 但是它会产生一系列形状。 我当然可以做: 但我希望该解决方案能够轻松扩展到更大的形状,例如: 无需在所有索引上运行循环。 有什么建议可以做到这一点吗? UPD1 数组可能不同,如: 它们也可能具有不同的形状,但是对于那种情况,一个简单的构造函数就可以了 UPD2 我真的想要一种可以处理任意形状(不一定都一样

  • 使用称为二进制的数据结构来存储大量原始数据。 二进制文件以比列表或元组更加节省空间的方式存储数据,并且运行时系统针对二进制文件的有效输入和输出进行了优化。 二进制文件以整数或字符串的顺序编写和打印,用小于或大于括号的双精度括起来。 以下是Erlang中二进制文件的示例 - 例子 (Example) -module(helloworld). -export([start/0]). start()

  • 问题内容: 我使用以下matlab代码创建了一个二进制文件: 我可以使用以下C代码读取此文件: 上面的C代码可以读取正确的结果。但是,我现在想在JAVA中读取这样的二进制文件。我的代码如下所示: 它确实在n + 1次循环后终止,但结果不正确。有人可以帮我吗。非常感谢! 问题答案: 正如我所猜测的那样,这是一个字节序问题,即您的二进制文件被写为低字节序的整数(可能是因为您使用的是Intel或类似的C

  • 问题内容: 我用Java编写了AWS Lambda函数。我用来上传Lambda 的工具(Terraform)想要使用jar文件的SHA-256哈希值来跟踪是否需要上传新版本的Lambda。 问题在于,不同OS平台(Windows和Linux)上的不同JDK创建的字节码略有不同(即使使用相同的JDK“更新”版本)。这意味着,如果我在Windows上上传了一个lambda,然后在Linux上重新运行了