我需要生成一个仅包含唯一单精度随机数的二进制文件。
目的是计算该文件的熵,并将其与其他数据集熵一起使用,计算熵文件/熵_randUnique比率。该值称为“随机性”。
我可以在Python中使用双精度数字并将它们插入set(),使用struct.pack来实现:
但是当我改变到单精度时,我不能仅仅更改打包方法(这将产生很多相同的数字,而且循环永远不会结束),也不能使用
numbers = set()
while len(numbers) < size:
numbers.add(struct.pack(precision,random.random()))
for num in numbers:
file.write(num)
但是当我改变到单精度时,我不能仅仅更改打包方法(这将产生很多相同的数字,而且循环永远不会结束),也不能使用
random
生成单精度数。我研究了一下numpy
,但据我所知,生成器的工作方式是一样的。如何在二进制文件中获得370914252个唯一的float32,即使它们不是随机的,我认为一个洗牌的序列就足够了。
yield
,我正在尝试使用for num in random_unique_floats(size): file.write(num)
,但我不确定它是否正确。它会出现错误 "used = bytearray(0 for i in range(2**32 / 8)) TypeError: 'float' object cannot be interpreted as an integer"。编辑:我已将 xrange 更改为 range,因为我正在使用 Python3。 - SamGamgee2**32 // 8
进行整数除法。我会编辑答案。不过我会保留xrange
,这样答案仍然适用于Python 2。 - Mark Ransom