【问题标题】:numpy array of arbitrary precision (10 bit int)任意精度的numpy数组(10位整数)
【发布时间】:2018-02-23 18:28:15
【问题描述】:

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

类似:

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

谢谢!

【问题讨论】:

  • 不,numpy 不支持 10 位整数类型,如果这是您所要求的。
  • 你可以构造 16 位数组而忽略前 6 位。
  • 好的,所以澄清一下:我最后需要的是一个二进制文件,其中每个值都是 10 位。有没有办法做到这一点?因此,如果我有 100 个值,我需要在一天结束时文件长度为 1000 位以匹配硬件。
  • 那么,您的问题是关于 10 位操作还是 10 位输出数据(或两者)?
  • 您可能会发现bitarray 包很有用。

标签: python numpy int precision


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    如果您主要想了解对 10 位数字的算术运算的准确性,您可以考虑的另一个选择是使用 spfpm 包。这将模拟定点算术运算的效果,包括乘法、除法、平方根、三角函数等,但目前不支持矩阵运算。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-04-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-24
      • 1970-01-01
      相关资源
      最近更新 更多