Précédent   Forum du club des développeurs et IT Pro > Autres langages > Python & Zope > Calcul scientifique
Calcul scientifique Forum d'entraide sur la programmation scientifique et bibliothèques associées (PIL, NumPy, SciPy, ...)
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 28/09/2012, 17h42   #1
alefriedx
Invité de passage
 
Alexandre FRIEDMANN
Inscription : septembre 2010
Messages : 16
Détails du profil
Informations personnelles :
Nom : Alexandre FRIEDMANN

Informations forums :
Inscription : septembre 2010
Messages : 16
Points : 3
Points : 3
Par défaut remplissage d'un array 3D

Bonjour,
je cale sur ce truc : il faut que je transforme cet array RAW en un array 3d comportant les elements z aux coordonnées x et y.

donc a partir de :
Code :
1
2
3
4
5
6
7
8
9
10
RAW = [\
[1,1,10],\
[1,2,20],\
[2,1,30],\
[2,2,40],\
[1,1,110],\
[1,2,120],\
[2,1,130],\
[2,2,140],\
]
il me faudrait
Code :
1
2
3
4
5
6
7
8
9
10
11
X = [1,2]
 
Y = [1,2]
 
Z = [
[[10,110],
[20,120]],
 
[[30,130],
[40,140]],
]
J'ai essayé avec des append, des insert, des concatenate, mais ca ne le fait pas :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
 
#!/usr/bin/python
import os
import sys
from pylab import *
import numpy as np
import time
import datetime
 
RAW = [\
[1,1,10],\
[1,2,20],\
[2,1,30],\
[2,2,40],\
[1,1,110],\
[1,2,120],\
[2,1,130],\
[2,2,140],\
]
 
RAW = np.transpose(RAW)
X = np.unique(RAW[0])
Y = np.unique(RAW[1])
 
Z = np.zeros((len(X),len(Y),1))
 
print Z
 
 
RAW = np.transpose(RAW)
for raw in RAW:
	x = raw[0]
	y = raw[1]
	z = raw[2]
	iX = np.where(X==x)[0][0]
	iY = np.where(Y==y)[0][0] 
	print Z[iX,iY]
	print np.append(Z[iX,iY],z)
	Z[iX,iY] = np.append(Z[iX,iY],z)
ça par exemple, ça me retourne : "ValueError: output operand requires a reduction, but reduction is not enabled"

c'est un exemple simplifié, car a la base, mon tableau RAW n'est pas nécessairement trié (et beaucoup plus gros).

Merci pour votre aide !
alefriedx est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/09/2012, 23h33   #2
dividee
Membre Expert
 
Homme
Inscription : mars 2007
Messages : 851
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Belgique

Informations forums :
Inscription : mars 2007
Messages : 851
Points : 1 182
Points : 1 182
Je propose ceci:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
import numpy as np
 
RAW = [[1,1,10],
       [1,2,20],
       [2,1,30],
       [2,2,40],
       [1,1,110],
       [1,2,120],
       [2,1,130],
       [2,2,140],
       ]
 
RAW = np.array(RAW)
 
X = np.unique(RAW[:,0])
Y = np.unique(RAW[:,1])
 
Z = [[[] for _ in Y] for _ in X]
for (x,y,z) in RAW:
    Z[where(X==x)[0]][where(Y==y)[0]].append(z)
 
Z = np.array(Z)
dividee est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/10/2012, 13h39   #3
alefriedx
Invité de passage
 
Alexandre FRIEDMANN
Inscription : septembre 2010
Messages : 16
Détails du profil
Informations personnelles :
Nom : Alexandre FRIEDMANN

Informations forums :
Inscription : septembre 2010
Messages : 16
Points : 3
Points : 3
merci !

je n'aurai pas pensé qu'il fut nécessaire de repasser par une liste...
Mais ça marche bien, merci !
alefriedx est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 11h56.


 
 
 
 
Partenaires

Hébergement Web