任意精度的 numpy 数组(10 位整数)
numpy array of arbitrary precision (10 bit int)
我需要模拟一个生成二进制文件的硬件,其中每个字都是 10 位。如何使用 numpy 数组实现此目的?
类似于:
outarray = np.zeros(512, dtype=np.int10)
谢谢!
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
如果您主要对了解 10 位数字算术运算的准确性感兴趣,您可以考虑的另一个选择是使用 spfpm 包。这将模拟fixed-point算术运算的效果,包括乘法、除法、square-roots、三角函数等,但目前不支持矩阵运算。
我需要模拟一个生成二进制文件的硬件,其中每个字都是 10 位。如何使用 numpy 数组实现此目的?
类似于:
outarray = np.zeros(512, dtype=np.int10)
谢谢!
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
如果您主要对了解 10 位数字算术运算的准确性感兴趣,您可以考虑的另一个选择是使用 spfpm 包。这将模拟fixed-point算术运算的效果,包括乘法、除法、square-roots、三角函数等,但目前不支持矩阵运算。