代码之家  ›  专栏  ›  技术社区  ›  Alex

任意精度的numpy数组(10位int)

  •  3
  • Alex  · 技术社区  · 6 年前

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

    类似于:

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

    谢谢

    2 回复  |  直到 6 年前
        1
  •  3
  •   kuppern87    6 年前

    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
  •  0
  •   rwp    6 年前

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