Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

décalage de tableau avec numpy?

17 réponses
Avatar
Sébastien Ramage
Bonjour =E0 tous
et oui j'ai une nouvelle difficult=E9 avec les tableaux de numpy

je cherche =E0 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=E9es X,Y

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

2 - faire un d=E9calage c'est =E0 dire, faire passer la 1ere valeur en
2e, la 2e en 3e, etc et la derni=E8re au d=E9but (par valeur je veux
parler de couple X,Y).

Quelqu'un =E0 une id=E9e ??

Seb

10 réponses

1 2
Avatar
Jerome
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



Avatar
Sébastien Ramage
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 !


Avatar
Jerome
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



Avatar
Elby

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



Avatar
Sébastien Ramage
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




Avatar
Sébastien Ramage
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
Avatar
Méta-MCI
Salut !

question... ;-)



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


Avatar
Sébastien Ramage
On 4 mai, 09:08, fred wrote:


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



Avatar
Sébastien Ramage
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
Avatar
Sébastien Ramage
On 4 mai, 10:09, "Méta-MCI" wrote:
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



:)



1 2