我有ABC123EFFF.
我想拥有001010101111000001001000111110111111111111(即二进制代表,例如42位数和前导零).
怎么样?
在Python V.2.5.4中,我有一个浮点数,我想获取并操作(作为整数)浮点数的位模式.
例如,假设我有
x = 173.3125
Run Code Online (Sandbox Code Playgroud)
在IEEE 754格式中,x的位模式(十六进制)是x.
如何在该位模式上获取和操作(例如,执行按位操作)?
我正在寻找Python的Python等价物Float.floatToBits.
我发现这个Python:获取和操作(作为整数)浮点数的位模式,但有没有人知道一个不那么复杂的方式?
以下代码是一个更大项目的一部分。在我的项目中,我必须阅读一个大文本文件,可能有几百万行,每行都有一对用空格分隔的小数。
一个例子如下:
-0.200000 -1.000000
-0.469967 0.249733
-0.475169 -0.314739
-0.086706 -0.901599
Run Code Online (Sandbox Code Playgroud)
到目前为止,我使用了一个由我创建的定制解析器,它运行良好,但不是最快的。在线搜索我发现numpy的loadtxt和pandas read_csv。第一个效果很好,但它的速度比我的还要差。第二个非常快,但我后来在我的项目中遇到了错误(我用有限元方法解决了一些 PDE,在用我的解析器或 loadtxt 读取坐标时,我得到了正确的结果,当我使用 read_csv 矩阵 A 时系统 Ax=b 变为单数)。
所以我创建了这个测试代码来看看发生了什么:
import numpy as np
import pandas as pd
points_file = './points.txt'
points1 = pd.read_csv(points_file, header=None, sep='\s+', dtype=np.float64).values
points2 = np.loadtxt(points_file, dtype=np.float64)
if (np.array_equal(points1, points2)):
print ('Equal')
else:
print ('Not Equal')
for i in range(len(points1)):
print (points1[i] == points2[i])
Run Code Online (Sandbox Code Playgroud)
令人惊讶的是,输出是:
Not Equal
[ True True]
[ True False]
[False True]
[False False]
Run Code Online (Sandbox Code Playgroud)
已经很困惑,我继续搜索,我从用户“Dan Lecocq”那里找到了这个函数来获取数字的二进制表示。
因此,对于第二行中的第二个数字 (0.249733),来自 read_csv …
在八度音程中,命令之后的所有数字输出format bit将显示存储在存储器中的数字的本机位表示.例如,
octave:1> format bit
octave:2> 0.5
ans = 0011111111100000000000000000000000000000000000000000000000000000
octave:7> 2
ans = 0100000000000000000000000000000000000000000000000000000000000000
octave:3> format
octave:4> 0.5
ans = 0.50000
Run Code Online (Sandbox Code Playgroud)
在python中是否有一个等效的命令来显示其原生位表示中的所有数字(所以输出如下所示)?
>>> "equivalent of the octave format bit command"
>>> 0.5
0011111111100000000000000000000000000000000000000000000000000000
Run Code Online (Sandbox Code Playgroud)
(这与0.5的二进制表示非常不同.)
我有一个Tensorflow布尔向量,我需要逐位反转,使得0(False)的所有值变为1(True),反之亦然.tf.logical_not存在,但它只接受布尔向量.是否存在Tensorflow在int或float的向量上执行此操作,因此我不需要重构我的张量?
问题:生成大型二进制字符串(长度 2000+)。动作要快,因为该generateRandom()函数将在算法中被调用300,000次。
尝试的解决方案:生成 3 或 4 个二进制数并将它们全部附加在一起 500 次。这太慢了。
对 random.random() 进行一次调用并将其乘以一个巨大的数字。转换为二进制一次即可完成。这适用于较小的数字,但由于二进制字符串必须具有一定的长度,因此要转换为二进制的数字必须非常巨大(2 ** len(binString))。
当前代码(适用于较小的数字):
binaryRepresentation = ''
binaryRepresentation += bin(int(random.random() * (2 ** binLength)))[2:].zfill(binLength)
Run Code Online (Sandbox Code Playgroud)
我需要帮助修复的错误:此调用会抛出一个“长整型太大,无法转换为浮点数”和大量数字。有没有办法使整个算法更高效或使这个大数字可以转换为浮点数?
谢谢你!
谁能告诉我如何在python中将浮点数转换为32位二进制字符串以及从32位二进制字符串转换为浮点数?
python 中的“bin”函数仅适用于整数。
我需要一个单比特字符串作为内部表示。我不希望小数位前后的数字有单独的位串,小数位之间由小数位连接。
编辑:标记的问题没有解释如何将二进制字符串转换为浮回。
python ×6
binary ×2
hex ×1
largenumber ×1
numpy ×1
optimization ×1
pandas ×1
python-3.x ×1
string ×1
tensorflow ×1