décalage de tableau avec numpy?

Le
Sébastien Ramage
Bonjour à tous
et oui j'ai une nouvelle difficulté avec les tableaux de numpy

je cherche à faire 2 choses sur un tableau 2D du style :
[[0.0,0.0],
[1.0,0.5],
[3.0,4.5],
[2.0,8.0],
[2.5,6.5]]

ce tableau contient des coordonnées X,Y

je souhaite:
1 - le trié suivant l'une des composantes, soit X, soit Y, ça parait
simple mais je n'y arrive pas, numpy me "mélange" toujours mes
coordonnées avec la fonctions sort (les X ne correspondent plus aux Y)

2 - faire un décalage c'est à dire, faire passer la 1ere valeur en
2e, la 2e en 3e, etc et la dernière au début (par valeur je veux
parler de couple X,Y).

Quelqu'un à une idée ??

Seb
Questions / Réponses high-tech
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses Page 1 / 2
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Jerome
Le #609332
Sébastien Ramage wrote:
Bonjour à tous


bonjour

et oui j'ai une nouvelle difficulté avec les tableaux de numpy

je cherche à faire 2 choses sur un tableau 2D du style :
[[0.0,0.0],
[1.0,0.5],
[3.0,4.5],
[2.0,8.0],
[2.5,6.5]]

ce tableau contient des coordonnées X,Y

je souhaite:
1 - le trié suivant l'une des composantes, soit X, soit Y, ça parait
simple mais je n'y arrive pas, numpy me "mélange" toujours mes
coordonnées avec la fonctions sort (les X ne correspondent plus aux Y)


C'est le fonctionnement normal. Je ne connais pas l'équivalent du sort
des listes de python sur des arrays de numpy. Une solution temporaire
pourrait être de convertir ton tableau en list, de faire un sort en
définisant la fonction de comparaison et de reconvertir en array :(

l = list(coord)
l.sort(lambda el1, el2 : cmp(el1[1], el2[1]))
coord = numpy.array(l)



2 - faire un décalage c'est à dire, faire passer la 1ere valeur en
2e, la 2e en 3e, etc et la dernière au début (par valeur je veux
parler de couple X,Y).


numpy.concatenate((coord[1:,:], coord[0:1,:]), 0)


Quelqu'un à une idée ??

Seb



Sébastien Ramage
Le #609219
je souhaite:
1 - le trié suivant l'une des composantes, soit X, soit Y, ça para it
simple mais je n'y arrive pas, numpy me "mélange" toujours mes
coordonnées avec la fonctions sort (les X ne correspondent plus aux Y)


C'est le fonctionnement normal. Je ne connais pas l'équivalent du sort
des listes de python sur des arrays de numpy. Une solution temporaire
pourrait être de convertir ton tableau en list, de faire un sort en
définisant la fonction de comparaison et de reconvertir en array :(

l = list(coord)
l.sort(lambda el1, el2 : cmp(el1[1], el2[1]))
coord = numpy.array(l)


:(
c'est fou que ça n'existe pas ??!!
numpy est très pratique pour faire des traiter des données
géométriques, ça me parait dingue que cette fonction qui me parait
essentielle n'existe pas!



2 - faire un décalage c'est à dire, faire passer la 1ere valeur en
2e, la 2e en 3e, etc et la dernière au début (par valeur je veux
parler de couple X,Y).


numpy.concatenate((coord[1:,:], coord[0:1,:]), 0)


ah oui ça c'est bien vue, je n'y avais pas pensé, merci !


Jerome
Le #609218
Sébastien Ramage wrote:
je souhaite:
1 - le trié suivant l'une des composantes, soit X, soit Y, ça parait
simple mais je n'y arrive pas, numpy me "mélange" toujours mes
coordonnées avec la fonctions sort (les X ne correspondent plus aux Y)
C'est le fonctionnement normal. Je ne connais pas l'équivalent du sort

des listes de python sur des arrays de numpy. Une solution temporaire
pourrait être de convertir ton tableau en list, de faire un sort en
définisant la fonction de comparaison et de reconvertir en array :(

l = list(coord)
l.sort(lambda el1, el2 : cmp(el1[1], el2[1]))
coord = numpy.array(l)


:(
c'est fou que ça n'existe pas ??!!
numpy est très pratique pour faire des traiter des données
géométriques, ça me parait dingue que cette fonction qui me parait
essentielle n'existe pas!


Je n'ai pas dit que ça n'existait pas, juste que je ne connaissais pas :)




2 - faire un décalage c'est à dire, faire passer la 1ere valeur en
2e, la 2e en 3e, etc et la dernière au début (par valeur je veux
parler de couple X,Y).
numpy.concatenate((coord[1:,:], coord[0:1,:]), 0)



ah oui ça c'est bien vue, je n'y avais pas pensé, merci !


En relisant je me rends compte que je fais le décalage dans l'autre sens
mais l'idée est identique



Elby
Le #609216

c'est fou que ça n'existe pas ??!!
numpy est très pratique pour faire des traiter des données
géométriques, ça me parait dingue que cette fonction qui me parait
essentielle n'existe pas!
Je ne connais pas de fonction pour le faire en une seule étape, mais tu

peux facilement la faire de la façon suivante :

def sort_col(M, col=0):
indices = M[:, col].argsort()
return M[indices]

M
array([[ 0. , 0. ],



[ 1. , 0.5],
[ 3. , 4.5],
[ 2. , 8. ],
[ 2.5, 6.5]])
sort_col(M, 1)
array([[ 0. , 0. ],



[ 1. , 0.5],
[ 3. , 4.5],
[ 2.5, 6.5],
[ 2. , 8. ]])

pour plus d'infos :
http://www.scipy.org/Numpy_Example_List_With_Doc?highlight=%28sort%
29#head-82d26af744a08992cf3422d6df9dc9e276e78263

si tu veux filter sur plusieurs colonnes en même temps, tu peux utiliser
lexsort (cf. http://www.scipy.org/Numpy_Example_List_With_Doc?highlight=
%28sort%29#head-82d26af744a08992cf3422d6df9dc9e276e78263)

--
Elby



Sébastien Ramage
Le #609212
Je ne connais pas de fonction pour le faire en une seule étape, mais tu
peux facilement la faire de la façon suivante :

def sort_col(M, col=0):
indices = M[:, col].argsort()
return M[indices]

M




array([[ 0. , 0. ],
[ 1. , 0.5],
[ 3. , 4.5],
[ 2. , 8. ],
[ 2.5, 6.5]])>>> sort_col(M, 1)

array([[ 0. , 0. ],
[ 1. , 0.5],
[ 3. , 4.5],
[ 2.5, 6.5],
[ 2. , 8. ]])

pour plus d'infos :http://www.scipy.org/Numpy_Example_List_With_Doc?highl ight=%28sort%
29#head-82d26af744a08992cf3422d6df9dc9e276e78263

si tu veux filter sur plusieurs colonnes en même temps, tu peux utiliser
lexsort (cf.http://www.scipy.org/Numpy_Example_List_With_Doc?highlight=
%28sort%29#head-82d26af744a08992cf3422d6df9dc9e276e78263)

--
Elby


merci pour la piste, ça fonctionne bien, même si je ne comprends pas
vraiment comment

merci !
Seb




Sébastien Ramage
Le #609211
la doc de numpy est horrible je ne trouve rien et les exemples sont
loin d'être clair$

bref encore une petite question
comment on trouve l'index d'une valeur dans un tableau? (à l'image de
la méthode "index" de l'objet "list" )
c'est à dire je connais mon couple X,Y et je veux savoir où il est
dans le tableau

merci d'avance...
Seb
Méta-MCI
Le #609102
Salut !

question... ;-)



D'ailleurs, c'était quoi, la question ?


Sébastien Ramage
Le #609101
On 4 mai, 09:08, fred


la doc de numpy est horrible je ne trouve rien et les exemples sont
loin d'être clair$

bref encore une petite question
comment on trouve l'index d'une valeur dans un tableau? (à l'image de
la méthode "index" de l'objet "list" )
c'est à dire je connais mon couple X,Y et je veux savoir où il est
dans le tableau
In [6]: print a[1,0,2]

14


Euhhh.., je me demande après coup si ça répond bien à la question ... ;-)

--http://scipy.org/FredericPetit


sans vouloir te vexer je ne comprends rien à ton exemple
je reformule ma question avec un exemple ça sera peut-être plus clair
j'ai un tableau 2D

M = array([[ 0. , 0. ],
[ 1. , 0.5],
[ 3. , 4.5],
[ 2. , 8. ],
[ 2.5, 6.5]])

et je voudrais trouver la position du point [2.0,8.0] par exemple
donc je voudrais un truc du genre :
find_index(M, [2.0,8.0])

et que la fonction me retourne 3



Sébastien Ramage
Le #609100
Réponse à moi même:

actuellement je fais ça :

def find_index(tab, point):
#cherche un point dans le tableau et retourne sa position
#retourne -1 si le point n'est pas dans le tableau
i = 0
for p in tab:
if p.tolist() == list(point):
break
i += 1
if i == len(tab):
i = -1
return i

mais je ne trouve pas ça formidable, il y a certainement une façon
plus rapide de le faire
Sébastien Ramage
Le #609099
On 4 mai, 10:09, "Méta-MCI"
Salut !

question... ;-)



D'ailleurs, c'était quoi, la question ?


la question c'était :

comment on trouve l'index d'une valeur dans un tableau? (à l'image de
la méthode "index" de l'objet "list" )
c'est à dire je connais mon couple X,Y et je veux savoir où il est
dans le tableau



:)



Publicité
Poster une réponse
Anonyme