Я понимаю, что numpy
не может обрабатывать не родные целые числа, но как я могу хранить Python высокоточные целые числа как array
нативных целых чисел (в любом порядке байтов)?Например,
a = 105951305240504794066266398962584786593081186897777398483830058739006966285013
не может быть сохранено как собственное целое число, потому что это 256
бит.Но он может быть сохранен как
A = array([18196013122530525909, 15462736877728584896,
12869567647602165677, 16879016735257358861], dtype=uint64)
, используя младший (то есть a == A[0] + A[1]<<64 + A[2]<<128 + A[3]<<192
) или A[::-1]
как старший.Как я могу преобразовать из a
в A
здесь?
Я хочу преобразовать это число "на стороне питона" в "число на стороне", чтобы я мог запускать на нем высокоэффективные алгоритмы (например, быстрое умножение с использованием преобразования Фурье ).
Я считаю, что Python внутренне уже должен использовать подобную структуру.Все, что мне нужно сделать, это «выставить» его на numpy
, но я не уверен насчет точной структуры или как я могу «выставить» его.Самый простой способ, конечно, использовать цикл while
:
A = np.zeros(4, 'uint64')
i = 0
while a > 0:
A[i] = a & (2**64-1)
a >>= 64
i += 1
Но мне интересно, есть ли более "родные" или "эффективные" способы?
Спасибо за вашпомощь!