Potrzebuję wykonać w Pythonie tego typu operacje:s1 = s0*k1 + k2s2 = s1*k1 + k2i 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ć?
1. Numpy jest proste aż do bólu, ale AFAIK liczy float pointy na
liczbach 64 bitowych IEEE 754, czyli na 80 bitowym FPU jeżeli to
zgodne z x86 (a właściwie x87). Chyba że jednak na SEE2 lub
AVX.
2. Python jest raczej mało wydajny, porównując z C lub Fortranem.
I oczywiście Asemblerem - w tym da się użyć SIMD co naprawdę daje
kopa.
3. CUDA itp. - jest do tego jakiś moduł w Pythonie (do wszystkiego
jest jakiś moduł) - patrz pypi. To powinno być prawie
to.
4. Ogólnie problem to brak 128 bitowych FPU - tzn. brak hardware.
0. Nie piszesz czy są to liczby float point. Nota bene, da się
liczyć nie tylko na int-ach, ale także na fixed-point, ułamkach
zwyczajnych...
-1. Jeżeli to kilkadziesiąt takich operacji liniowych... na cały
program... to wydajność nie ma znaczenia.
-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.
-3. No i kwestia - duże liczby (większe niż 10^310), czy liczby z
dużą liczbą cyfr znaczących, np. 0.123456789123
456789123456789123455667789 ?
----Android NewsGroup Reader----
http://usenet.sinaapp.com/