Traitement de données

Résolu/Fermé
Johanens Messages postés 4 Date d'inscription vendredi 28 mars 2014 Statut Membre Dernière intervention 14 août 2014 - 29 mars 2014 à 15:00
 Johanens - 29 mars 2014 à 20:09
Bonjour,

A l'aide d'une interface Labview, j'ai recueilli des données au format .mat que je souhaiterais traiter en python afin de tracer un spectre de puissance. Le problème est que l'acquisition donne énormément de valeurs.

x=sio.loadmat('Data1.mat') #j'importe le fichier de données
print(x)
{'header': array([ u'20/03/2014 10:07:45\r\nDev4/ai0:2\r\nSamples 600000\rRate 20000\rEnter the parameters \n\n'],
dtype='<U84'), 'data': array([[ 0.05972884, -0.02883004, 0.01754261, ..., 0.06037291,
-0.02818598, 0.01689854]])}
#mes données sont donc sous la forme d'un tableau de 2 colonnes, les informations contenues dans le 'data'

A=x['data']
B=x['header'] #je sépare data et header pour traiter data

print(A)
[[ 0.05972884 -0.02883004 0.01754261 ..., 0.06037291 -0.02818598
0.01689854]]

print(A.shape)
(1L, 1800000L) # mon fichier contient donc 1 800 000 chiffres.

L'interface Labview collectait 3 valeurs (3détecteurs) à chaque mesure sur 600 000 mesures (jusque là tout semble coller)

je cherche ensuite à collecter 1 donnée sur trois pour séparer le data en 3 paquets de 600 000


j'utilise ensuite:

print(somme)
xdiff=A[2:3:1800000]
print(xdiff)
ydiff=A[3:3:1800000]
print(ydiff) #je devrais récupérer ce que je souhaite

[]
[]
[] #cependant voici ce que Python me renvoie

de plus quand j'essaye de tracer avec plot(xdiff) par exemple, mon ordinateur plante.

Est-ce dû au fait qu'il y a trop de données où que je m'y prends de la mauvaise manière?

merci d'avance!

7 réponses

Utilisateur anonyme
29 mars 2014 à 15:47
"où que je m'y prends de la mauvaise manière"

Sans doute possible,

Déjà tes données sont mal représentées, par exemple

print(A)


Il manque pas des virgules dans le résultat de ta liste ci-dessous ?

[[ 0.05972884 -0.02883004 0.01754261 ..., 0.06037291 -0.02818598
0.01689854]]


"je cherche ensuite à collecter 1 donnée sur trois pour séparer le data en 3 paquets de 600 000"

Donc pour l'exemple de A on devrait avoir ?

Car ce n'est pas clair cette phrase, à moins d'être à 100% dans le projet avec toi... ce qui n'est pas le cas des lecteurs ici !
0
Bonjour,

je comprends que ce n'est pas très clair, je vais essayer d'éclaircir ces points :)

Quand je fait print(A), je dois obtenir le tableau de valeurs qui est contenu dans mon x={'header': array([ u'20/03/2014 10:07:45\r\nDev4/ai0:2\r\nSamples 600000\rRate 20000\rEnter the parameters \n\n'],
dtype='<U84'), 'data': array([[ 0.05972884, -0.02883004, 0.01754261, ..., 0.06037291,
-0.02818598, 0.01689854]])}
je cherche a isolé le 'data' qui est un tableau de 1 800 000 valeurs.

Je n'avais pas fait attention qu'il manquait des virgules mais c'est pourtant bien ce que Python me donne lorsque je tape print(A) (je ne comprend pas pourquoi les virgules disparaissent..). Le A est un tableau d'une ligne de 1 800 000 valeurs.

L'interface Labview qui m'a permi d'obtenir ces données se base sur les données envoyées par trois capteurs. Ainsi, A qui contient 1 800 000 valeurs est composé de 600 000 triplets de valeurs (xdiff, ydiff, somme) et j'aimerais bien pouvoir scindé le tableau A pour avoir 3 tableau xdiff, ydiff, somme.

C'est pourquoi j'écris xdiff=A[2:3:1800000]: j'aimerais que xdiff soit un tableau, créé à partir de A, en commençant à la deuxième valeur de A, en sélectionnant une valeur toutes les 3 valeurs sur les 1 800 000 valeurs.

Ce que je ne comprend pas c'est pourquoi quand j'écris xdiff=A[2:3:1800000], python me renvoie un crochet vide []..
0
Ah, j'ai trouvé pourquoi il manque des virgules (ou du moins d'où cela vient)

Si j'écris print(A), j'obtiens: [[ 0.05972884 -0.02883004 0.01754261 ..., 0.06037291 -0.02818598
0.01689854]], où il manque des virgules

et si j'écris seulement A j'obtiens:

A=array([[ 0.05972884, -0.02883004, 0.01754261, ..., 0.06037291,
-0.02818598, 0.01689854]]), A est donc bien sous la forme d'un tableau.

Il faudrait maintenant que je puisse séparer ce tableau en trois tableaux.
Dans un tableau, j'aimerais avoir la première valeur de A, ainsi que la 4eme, et la 7eme, etc (de 3 en 3)
Dans un autre tableau, la deuxième valeur, la 5e, 8e, etc et dans le troisième, la troisième valeur, la 6e, 9e, 12e etc.
Est ce que cela est envisageable en python ou pas? merci d'avance! :)
0
Utilisateur anonyme
29 mars 2014 à 17:37
>>> A = list(range(25))
>>> A
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24]
>>> A[::3]
[0, 3, 6, 9, 12, 15, 18, 21, 24]


Ça t'éclaires ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Merci mais j'avais déjà essayé cette commande mais ça ne fonctionne pas. Voici ce qu'elle me donne:

A[::3]
Out[3]:
array([[ 0.05972884, -0.02883004, 0.01754261, ..., 0.06037291,
-0.02818598, 0.01689854]])

A[::1]
Out[4]:
array([[ 0.05972884, -0.02883004, 0.01754261, ..., 0.06037291,
-0.02818598, 0.01689854]])

A[::2]
Out[5]:
array([[ 0.05972884, -0.02883004, 0.01754261, ..., 0.06037291,
-0.02818598, 0.01689854]])
A chaque fois, les premières valeurs restent les mêmes alors qu'elles devraient avoir changé. Cela vient peut-être du fait que A est un tableau (array) plutôt qu'une liste non?
0
Utilisateur anonyme
29 mars 2014 à 19:31
A[0][::3]

? (il me semble que tu as à faire à une liste de listes)
0
Ouh, ça m'a l'air pas mal ça! :)

ouiiii! c'est exactement ce que je cherchais! :D

Merci beaucoup fred d'avoir pris le temps de répondre! :)

Je devrais réussir à me débrouiller normalement maintenant !
Encore merci! :)
0