-
1. Data: 2020-12-29 02:32:40
Temat: Czy numpy przyspieszy działania na dużych liczbach w Pythonie?
Od: "o...@g...com" <o...@g...com>
Potrzebuję wykonać w Pythonie tego typu operacje:
s1 = s0*k1 + k2
s2 = s1*k1 + k2
i tak dalej, powiedzmy kilkadziesiąt iteracji. Chodzi o duże liczby, głównie
128-bitowe. Czy numpy jakkolwiek może to przyspieszyć? Jeśli tak, to jak tego użyć?
-
2. Data: 2020-12-31 22:48:24
Temat: Re: Czy numpy przyspieszy działania na dużych liczbach w Pythonie?
Od: "o...@g...com" <o...@g...com>
Trochę się zmieniło. Okazało się, że mogę tu skrócić modulo, a w związku z tym
zastosować "&", zaś dzielenia przez 2 zastąpić ">>".
a=333
b=555
c=777
d=999
x=12345
mask128 = 2**4-1
for i in range(128):
if x & 1:
x=((x * a + b) >> 1) & mask128
else:
x=(x * (c >> 1) + d) & mask128
s=10//2
print(x)
Tak to teraz wygląda. W tej chwili matematyki jest tu już mniej. Wciąż pozostają
jednak mnożenia z dodawaniem (ale coraz mniej widzę tu pola do przyspieszeń). Takich
pętli dla różnych a, b, c, d, x muszę mieć 20 w programie. Działamy tylko na liczbach
całkowitych, a, b, c, d mogą być też ujemne.
> 3. CUDA itp. - jest do tego jakiś moduł w Pythonie (do wszystkiego
> jest jakiś moduł) - patrz pypi. To powinno być prawie
> to.
Ok, poszukam.
> -2. Operacje jakie chcesz robić to mnożenie y = A x, gdzie y i x
> są wektorami, A jest macierzą. Może być opłacalne
> zdiagonalizowanie macierzy A (czyli transformacja U y = U A U^-1
> U x), bo wtedy wielokrotne mnożenia się trywializują. Patrz też
> wartości i wektory własne.
Zapomniałem dodać, że nie można założyć, że te operacje będą wykonywane pod rząd. Jak
widzimy w pętli jest warunek, który jest spełniony dosyć chaotycznie i wtedy
zmieniamy współczynniki. A zdaje się, że powyższa operacja miałaby sens tylko dla
wielu mnożeń pod rząd?
-
3. Data: 2020-12-31 22:50:10
Temat: Re: Czy numpy przyspieszy działania na dużych liczbach w Pythonie?
Od: "o...@g...com" <o...@g...com>
Oczywiście mask128 = 2**128-1, ma być równe 2**128-1. W kodzie jest błąd.