任意精度的NumPy数组(10位整数)

4

我需要模拟一个生成二进制文件的硬件,其中每个字都是10位。我该如何使用numpy数组实现这一点?

类似于:

outarray = np.zeros(512, dtype=np.int10)

谢谢!


不,如果您在询问是否支持10位整数类型,那么numpy是不支持的。 - juanpa.arrivillaga
1
你可以构建16位数组,然后忽略掉前6位。 - Mad Physicist
好的,让我澄清一下:最终我需要的是一个二进制文件,其中每个值都是10位。有没有办法做到这一点?因此,如果我有100个值,最终我需要的文件长度为1000位,以匹配硬件。 - Alex
我真正关心的是输出 - 我正在从另一个源读入数据到一个numpy数组中,我只需要将其作为一个具有10位精度的二进制文件立即传递出去,我不需要对数据执行任何实际的操作。 - Alex
我想这是正确的 - 我只需要将一个numpy整数数组转换为位字符串,并将其编码为字节,采用小端编码。 - Alex
显示剩余3条评论
2个回答

3

Numpy没有uint10类型。但您可以使用uint16,并使用位掩码来检查溢出。并使用binary_rep来获取10位二进制表示:

import numpy as np

MAX_WORD = 2**10
unused_bits = ~np.array([MAX_WORD-1], dtype="uint16")  # Binary mask of the 6 unused_bits

words = np.random.randint(MAX_WORD, size=10, dtype="uint16")  #  Create 10 bit words
assert not np.any(words & unused_bits)  # Check for overflow
for word in words:
    print(word, np.binary_repr(word, width=10))  # Get 10 bit binary representation

binary_repr = "".join(np.binary_repr(word, width=10) for word in words)
print(binary_repr)  # Full binary representation

0

如果您主要关心了解10位数字的算术运算精度,那么您可以考虑另一种选择,即使用spfpm软件包。这将模拟定点算术运算的效果,包括乘法、除法、平方根、三角函数等,但目前不支持矩阵运算。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接