bonjour bonjour,
je viens de passer de numarray à numpy 1.0b, pour gagner en rapidité. A part qq détails, la transition marchait à merveille, les méthodes gardaient le même nom, etc...
Mais là, je bute!
Je manipule des données 16 bits par paquets. Au cours du traitement, les données sont plusieurs fois écrites, puis lues dans des fichiers intermédiaires (pour permettre la reprise du traitement, par exemple). L'écriture et la lecture sont effectuées avec tostring() et fromstring() .
Une étape du traitement comprend une 'égalisation' de la longueur des paquets, par exemple à 40 000 octets. Un paquet de 45 000 est tronqué à 40 000, un paquet de 39 000 est concaténé à 40 000 avec des 0.
Après écriture (avec tostring) puis lecture (avec fromstring), les lignes (ou paquets, kif kif) qui avaient été complétées par des 0 sont bizarrement transformées:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 if len(ligne) < 40000: return n.concatenate( (ligne, n.repeat( [0], 40000 - len(ligne)) ) else: return ligne[:40000]
Mais la longueur est bien 40000 octets. Donc perte de données, pourrissage de données,...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 # avant écriture/lecture, une ligne complétée par des 0: [30000, 35000, 32000, 34000, ... 0, 0, 0, 0] # après: [30000, 0, 35000, 0, 32000, 0, 34000, 0, ... 0,0,0,0]
Problème de mémoire non-contigue? tostring inclut un nouvel argument sous numpy, order qui prend les valeurs 'C', 'Fortran' ou 'None' (je crois). Mais mes qq essais n'ont pas été concluants...
Pleaaase help!
Partager