[python] Optimalizace
Jirka Vejrazka
jirka.vejrazka na gmail.com
Pondělí Květen 2 14:17:28 CEST 2011
Me to napada, ale nejsem ted bohuzel u PC a na mobilu se kod pise spatne.
Kazdopadne bych zrusil "while True" a test na deleni ctyrmi, udelal
bych si promennou "idx" a z "dat" bych bral [I:i+3], ktere bych pak
poslal funkci, ktera by spocitala dane 32-bitove cislo a
Pokud by ani to rychlostne nestacilo, zkusil bych ten cyklus dat na
starost necemu z itertools a pripadne to jeste zrychlit pomoci psyco.
Jirka
On 02/05/2011, mol-python at seznam.cz <mol-python at seznam.cz> wrote:
>
> Čistě v Pythonu existujou věci jako array a struct moduly
> http://docs.python.org/library/array.html
> http://docs.python.org/library/struct.html
> numpy neznám, náhledem do dokumentace mě zaujal memmap
> http://docs.scipy.org/doc/numpy/reference/generated/numpy.memmap.html
>
>
>> ------------ Původní zpráva ------------
>> Od: Radek Machulka <radek.machulka at gmail.com>
>> Předmět: [python] Optimalizace
>> Datum: 02.5.2011 11:36:14
>> ----------------------------------------
>> Zdravim,
>>
>> v souboru mam (krom jineho) ulozene 2D pole cisel. Cisla jsou 32bit float
>> a
>> jsou rozdelena vzdy do 4 po sobe jdoucich bytu.
>>
>> Pro vytvoreni pozadovaneho pole hodnot mam nasledujici funkci (informaci o
>>
>> rozmerech mam z jineho mista v souboru):
>>
>> from numpy import array
>> from numpy import reshape
>> from numpy import float32
>>
>> def createMatrix(dat, shape):
>> lst = []
>> i = 0
>> while True:
>> try:
>> if i % 4 == 0:
>> lst.append(float(ord(dat[i]) << 3 * 8 | ord(dat[i + 1]) <<
>> 2 * 8 | ord(dat[i + 2]) << 1 * 8 | ord(dat[i + 3])))
>> i = i + 1
>> except IndexError:
>> break
>> return array(lst, float32).reshape(shape)
>>
>> Funkce funguje, ale je prilis pomala. Napada nekoho jak to cele napsat
>> vykonove optimalneji.
>>
>> Dik
>> Radek
> _______________________________________________
> Python mailing list
> Python at py.cz
> http://www.py.cz/mailman/listinfo/python
>
Další informace o konferenci Python