我了解到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
但是我想知道还有更多的“本机”或“有效”方式吗?
感谢您的帮助!