Python высокоточное целое число в массиве numpy integer - PullRequest
0 голосов
/ 14 декабря 2018

Я понимаю, что 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

Но мне интересно, есть ли более "родные" или "эффективные" способы?

Спасибо за вашпомощь!

...