Python高精度整数到numpy整数数组

时间:2018-12-14 07:34:16

标签: python numpy bignum

我了解到numpy无法处理非本地整数,但是如何将python高精度整数存储为array本机整数(在任一端序中)?例如

a = 105951305240504794066266398962584786593081186897777398483830058739006966285013

因为它的256位而不能存储为本地整数。但是它可以存储为

A = array([18196013122530525909, 15462736877728584896,
           12869567647602165677, 16879016735257358861], dtype=uint64)

使用little-endian(即a == A[0] + A[1]<<64 + A[2]<<128 + A[3]<<192)或A[::-1]作为big-endian。如何在这里从a转换为A

我想将此“ python-side”数字转换为“ numpy-side”,以便我可以在其上运行高效算法(例如,使用傅立叶变换的快速乘法)。

我认为Python内部应该已经在使用类似的结构。我需要做的就是将其“暴露”到numpy,但是我不确定确切的结构或如何“暴露”它。最直接的方法当然是使用while循环:

A = np.zeros(4, 'uint64')
i = 0
while a > 0:
    A[i] = a & (2**64-1)
    a  >>= 64
    i   += 1

但是我想知道还有更多的“本机”或“有效”方式吗?

感谢您的帮助!

0 个答案:

没有答案