c'est assez pythonique ? ... en tout cas c'est fonctionnel ;)
Christophe wrote:
Bonjour,
Je butte sur un problème très simple et je ne trouve pas de solution élégante.
Soit la matrice A par exemple de dimension 2 : A = [[1,2],[3,4]]
donc A > 1 2 3 4
Je souhaiterais sélectioner la première colonne, donc [1,3] et la seule méthode que j'ai trouvée est la suivante : [A[i][0] for i in range(len(A))]
Autant dire que ce n'est pas très lisible !
Quelqu'un aurait-il une méthode plus 'pythonique' ?
Merci,
Christophe
On Thu, 10 Mar 2005 19:07:59 +0100, Jerome
Bonjour,
Je butte sur un problème très simple et je ne trouve pas de solution élégante.
Soit la matrice A par exemple de dimension 2 : A = [[1,2],[3,4]]
donc A > > 1 2 3 4
Je souhaiterais sélectioner la première colonne, donc [1,3] et la seule méthode que j'ai trouvée est la suivante : [A[i][0] for i in range(len(A))]
Autant dire que ce n'est pas très lisible !
Quelqu'un aurait-il une méthode plus 'pythonique' ?
Merci,
Bonjour,
une autre solution :
import numarray
a = numarray.array([[1,2],[3,4]]) print numarray.transpose(a)[0]
Après, de là à dire que c'est plus simple ou plus efficace je ne saurais pas dire. En tout cas c'est plus mathématique ;-)
Oui il y a aussi l'instruction 'take' avec numarray qui permet de sélectionner ce que l'on veut mais l'inconvénient de numarray c'est qu'il ne fonctionne que avec des nombres !
Merci,
On Thu, 10 Mar 2005 19:07:59 +0100, Jerome
Bonjour,
Je butte sur un problème très simple et je ne trouve pas de solution
élégante.
Soit la matrice A par exemple de dimension 2 :
A = [[1,2],[3,4]]
donc A > > 1 2
3 4
Je souhaiterais sélectioner la première colonne, donc [1,3] et la
seule méthode que j'ai trouvée est la suivante :
[A[i][0] for i in range(len(A))]
Autant dire que ce n'est pas très lisible !
Quelqu'un aurait-il une méthode plus 'pythonique' ?
Merci,
Bonjour,
une autre solution :
import numarray
a = numarray.array([[1,2],[3,4]])
print numarray.transpose(a)[0]
Après, de là à dire que c'est plus simple ou plus efficace je ne
saurais pas dire. En tout cas c'est plus mathématique ;-)
Oui il y a aussi l'instruction 'take' avec numarray qui permet de
sélectionner ce que l'on veut mais l'inconvénient de numarray c'est
qu'il ne fonctionne que avec des nombres !
Je butte sur un problème très simple et je ne trouve pas de solution élégante.
Soit la matrice A par exemple de dimension 2 : A = [[1,2],[3,4]]
donc A > > 1 2 3 4
Je souhaiterais sélectioner la première colonne, donc [1,3] et la seule méthode que j'ai trouvée est la suivante : [A[i][0] for i in range(len(A))]
Autant dire que ce n'est pas très lisible !
Quelqu'un aurait-il une méthode plus 'pythonique' ?
Merci,
Bonjour,
une autre solution :
import numarray
a = numarray.array([[1,2],[3,4]]) print numarray.transpose(a)[0]
Après, de là à dire que c'est plus simple ou plus efficace je ne saurais pas dire. En tout cas c'est plus mathématique ;-)
Oui il y a aussi l'instruction 'take' avec numarray qui permet de sélectionner ce que l'on veut mais l'inconvénient de numarray c'est qu'il ne fonctionne que avec des nombres !
Merci,
Christophe
bonjour,
map(lambda x : x[0], A)
ou encore
map(lambda x : x[:1], A)
c'est assez pythonique ? ... en tout cas c'est fonctionnel ;)
Ouh là là je trouve que c'est encore moins clair pour un profane ! ;-) Je cherche en fait une solution qui soit aussi élégante que ce que l'on fait avec Matlab :
A = [[1,2];[3,4]] A(:,1) [1, 3]
Merci quand même !
bonjour,
map(lambda x : x[0], A)
ou encore
map(lambda x : x[:1], A)
c'est assez pythonique ? ... en tout cas c'est fonctionnel ;)
Ouh là là je trouve que c'est encore moins clair pour un profane ! ;-)
Je cherche en fait une solution qui soit aussi élégante que ce que l'on
fait avec Matlab :
c'est assez pythonique ? ... en tout cas c'est fonctionnel ;)
Ouh là là je trouve que c'est encore moins clair pour un profane ! ;-) Je cherche en fait une solution qui soit aussi élégante que ce que l'on fait avec Matlab :
A = [[1,2];[3,4]] A(:,1) [1, 3]
Merci quand même !
Amaury Forgeot d'Arc
Bonjour,
Je butte sur un problème très simple et je ne trouve pas de solution élégante.
Soit la matrice A par exemple de dimension 2 : A = [[1,2],[3,4]]
donc A > 1 2 3 4
Je souhaiterais sélectioner la première colonne, donc [1,3] et la seule méthode que j'ai trouvée est la suivante : [A[i][0] for i in range(len(A))]
Autant dire que ce n'est pas très lisible !
Quelqu'un aurait-il une méthode plus 'pythonique' ?
Merci,
Moi, j'écrirais: [a[0] for a in A] qui est plus simple que ton exemple, ou même: zip(*A)[0] Si si, ça marche ! zip peut servir à transposer une matrice... même si c'est moins lisible au premier coup d'oeil !
Amaury
Bonjour,
Je butte sur un problème très simple et je ne trouve pas de solution
élégante.
Soit la matrice A par exemple de dimension 2 :
A = [[1,2],[3,4]]
donc A > 1 2
3 4
Je souhaiterais sélectioner la première colonne, donc [1,3] et la seule
méthode que j'ai trouvée est la suivante :
[A[i][0] for i in range(len(A))]
Autant dire que ce n'est pas très lisible !
Quelqu'un aurait-il une méthode plus 'pythonique' ?
Merci,
Moi, j'écrirais:
[a[0] for a in A]
qui est plus simple que ton exemple,
ou même:
zip(*A)[0]
Si si, ça marche ! zip peut servir à transposer une matrice...
même si c'est moins lisible au premier coup d'oeil !
Je butte sur un problème très simple et je ne trouve pas de solution élégante.
Soit la matrice A par exemple de dimension 2 : A = [[1,2],[3,4]]
donc A > 1 2 3 4
Je souhaiterais sélectioner la première colonne, donc [1,3] et la seule méthode que j'ai trouvée est la suivante : [A[i][0] for i in range(len(A))]
Autant dire que ce n'est pas très lisible !
Quelqu'un aurait-il une méthode plus 'pythonique' ?
Merci,
Moi, j'écrirais: [a[0] for a in A] qui est plus simple que ton exemple, ou même: zip(*A)[0] Si si, ça marche ! zip peut servir à transposer une matrice... même si c'est moins lisible au premier coup d'oeil !
Amaury
F. Petitjean
bonjour,
map(lambda x : x[0], A)
ou encore
map(lambda x : x[:1], A)
c'est assez pythonique ? ... en tout cas c'est fonctionnel ;)
Ouh là là je trouve que c'est encore moins clair pour un profane ! ;-) Non non cela peut être clair on peut écrire aussi
colonne_1 = [ ligne[0] for ligne in A ] et cela ne me paraît pas obscur.
Je cherche en fait une solution qui soit aussi élégante que ce que l'on fait avec Matlab :
A = [[1,2], [3,4]] A(:,1) [1, 3]
Pour imiter Matlab (c)(r):
import Numeric as N # ou numarray A = N.array( ((1,2), (3, 4)), N.Int) # ou N.Float A[:, 0] # première colonne
Remarquez que les indices en ython commencent à 0 (1 avec Matlab/FORTRAN)
Attention pour un tel tableau on n'a qu'une version en mémoire, il n'y a pas copie du contenu A[:, 0] = N.zeros((2,), N.Int) et la matrice n'est plus inversible :
A array([[0, 2],
[0, 4]])
Merci quand même !
bonjour,
map(lambda x : x[0], A)
ou encore
map(lambda x : x[:1], A)
c'est assez pythonique ? ... en tout cas c'est fonctionnel ;)
Ouh là là je trouve que c'est encore moins clair pour un profane ! ;-)
Non non cela peut être clair on peut écrire aussi
colonne_1 = [ ligne[0] for ligne in A ]
et cela ne me paraît pas obscur.
Je cherche en fait une solution qui soit aussi élégante que ce que l'on
fait avec Matlab :
A = [[1,2], [3,4]]
A(:,1)
[1, 3]
Pour imiter Matlab (c)(r):
import Numeric as N # ou numarray
A = N.array( ((1,2), (3, 4)), N.Int) # ou N.Float
A[:, 0] # première colonne
Remarquez que les indices en ython commencent à 0 (1 avec
Matlab/FORTRAN)
Attention pour un tel tableau on n'a qu'une version en mémoire, il n'y a
pas copie du contenu
A[:, 0] = N.zeros((2,), N.Int)
et la matrice n'est plus inversible :
c'est assez pythonique ? ... en tout cas c'est fonctionnel ;)
Ouh là là je trouve que c'est encore moins clair pour un profane ! ;-) Non non cela peut être clair on peut écrire aussi
colonne_1 = [ ligne[0] for ligne in A ] et cela ne me paraît pas obscur.
Je cherche en fait une solution qui soit aussi élégante que ce que l'on fait avec Matlab :
A = [[1,2], [3,4]] A(:,1) [1, 3]
Pour imiter Matlab (c)(r):
import Numeric as N # ou numarray A = N.array( ((1,2), (3, 4)), N.Int) # ou N.Float A[:, 0] # première colonne
Remarquez que les indices en ython commencent à 0 (1 avec Matlab/FORTRAN)
Attention pour un tel tableau on n'a qu'une version en mémoire, il n'y a pas copie du contenu A[:, 0] = N.zeros((2,), N.Int) et la matrice n'est plus inversible :
On 10 Mar 2005 19:56:47 GMT, "F. Petitjean" wrote :
bonjour,
map(lambda x : x[0], A)
ou encore
map(lambda x : x[:1], A)
c'est assez pythonique ? ... en tout cas c'est fonctionnel ;)
Ouh là là je trouve que c'est encore moins clair pour un profane ! ;-) Non non cela peut être clair on peut écrire aussi
colonne_1 = [ ligne[0] for ligne in A ] et cela ne me paraît pas obscur.
Je cherche en fait une solution qui soit aussi élégante que ce que l'on fait avec Matlab :
A = [[1,2], [3,4]] A(:,1) [1, 3]
Pour imiter Matlab (c)(r):
import Numeric as N # ou numarray A = N.array( ((1,2), (3, 4)), N.Int) # ou N.Float A[:, 0] # première colonne
Remarquez que les indices en ython commencent à 0 (1 avec Matlab/FORTRAN)
Attention pour un tel tableau on n'a qu'une version en mémoire, il n'y a pas copie du contenu A[:, 0] = N.zeros((2,), N.Int) et la matrice n'est plus inversible :
A array([[0, 2],
[0, 4]])
Effectivement c'est élégant mais cela a l'inconvénient de dépendre d'un import et numarray ne fonctionne qu'avec des nombres. Je cherchais une solution générique qui puisse convenir partout...
Merci !
On 10 Mar 2005 19:56:47 GMT, "F. Petitjean" <littlejohn.75@news.free.fr>
wrote :
bonjour,
map(lambda x : x[0], A)
ou encore
map(lambda x : x[:1], A)
c'est assez pythonique ? ... en tout cas c'est fonctionnel ;)
Ouh là là je trouve que c'est encore moins clair pour un profane !
;-)
Non non cela peut être clair on peut écrire aussi
colonne_1 = [ ligne[0] for ligne in A ]
et cela ne me paraît pas obscur.
Je cherche en fait une solution qui soit aussi élégante que ce que
l'on fait avec Matlab :
A = [[1,2], [3,4]]
A(:,1)
[1, 3]
Pour imiter Matlab (c)(r):
import Numeric as N # ou numarray
A = N.array( ((1,2), (3, 4)), N.Int) # ou N.Float
A[:, 0] # première colonne
Remarquez que les indices en ython commencent à 0 (1 avec
Matlab/FORTRAN)
Attention pour un tel tableau on n'a qu'une version en mémoire, il n'y
a pas copie du contenu
A[:, 0] = N.zeros((2,), N.Int)
et la matrice n'est plus inversible :
A
array([[0, 2],
[0, 4]])
Effectivement c'est élégant mais cela a l'inconvénient de dépendre d'un
import et numarray ne fonctionne qu'avec des nombres.
Je cherchais une solution générique qui puisse convenir partout...
On 10 Mar 2005 19:56:47 GMT, "F. Petitjean" wrote :
bonjour,
map(lambda x : x[0], A)
ou encore
map(lambda x : x[:1], A)
c'est assez pythonique ? ... en tout cas c'est fonctionnel ;)
Ouh là là je trouve que c'est encore moins clair pour un profane ! ;-) Non non cela peut être clair on peut écrire aussi
colonne_1 = [ ligne[0] for ligne in A ] et cela ne me paraît pas obscur.
Je cherche en fait une solution qui soit aussi élégante que ce que l'on fait avec Matlab :
A = [[1,2], [3,4]] A(:,1) [1, 3]
Pour imiter Matlab (c)(r):
import Numeric as N # ou numarray A = N.array( ((1,2), (3, 4)), N.Int) # ou N.Float A[:, 0] # première colonne
Remarquez que les indices en ython commencent à 0 (1 avec Matlab/FORTRAN)
Attention pour un tel tableau on n'a qu'une version en mémoire, il n'y a pas copie du contenu A[:, 0] = N.zeros((2,), N.Int) et la matrice n'est plus inversible :
A array([[0, 2],
[0, 4]])
Effectivement c'est élégant mais cela a l'inconvénient de dépendre d'un import et numarray ne fonctionne qu'avec des nombres. Je cherchais une solution générique qui puisse convenir partout...
Merci !
Christophe
bonjour,
map(lambda x : x[0], A)
ou encore
map(lambda x : x[:1], A)
c'est assez pythonique ? ... en tout cas c'est fonctionnel ;)
Ouh là là je trouve que c'est encore moins clair pour un profane ! ;-) Je cherche en fait une solution qui soit aussi élégante que ce que l'on fait avec Matlab :
A = [[1,2];[3,4]] A(:,1)
[1, 3]
Merci quand même !
de rien,
cette solution a l'avantage de ne pas dependre d'un import, et de marcher avec n'importe quel type de donnee, et d'eviter de copier la liste,
en plus c'est tres elegant... mais ce dernier point est subjectif ;)
Effectivement c'est plutôt élégant mais néanmoins peu compréhensible au premier abord... Je pense cependant que je vais l'adopter car je suppose que utiliser map est beaucoup plus rapide que de faire ce que les autres ont proposé (qui est plus lisible mais peut-être plus lent) : [ligne[0] for ligne in A]
Est-ce que je me trompe ? ou c'est kif kif dans tous les cas ?
Merci pour l'astuce en tout cas !
bonjour,
map(lambda x : x[0], A)
ou encore
map(lambda x : x[:1], A)
c'est assez pythonique ? ... en tout cas c'est fonctionnel ;)
Ouh là là je trouve que c'est encore moins clair pour un profane !
;-) Je cherche en fait une solution qui soit aussi élégante que ce
que l'on fait avec Matlab :
A = [[1,2];[3,4]]
A(:,1)
[1, 3]
Merci quand même !
de rien,
cette solution a l'avantage de ne pas dependre d'un import,
et de marcher avec n'importe quel type de donnee,
et d'eviter de copier la liste,
en plus c'est tres elegant... mais ce dernier point est subjectif ;)
Effectivement c'est plutôt élégant mais néanmoins peu compréhensible au
premier abord...
Je pense cependant que je vais l'adopter car je suppose que utiliser map
est beaucoup plus rapide que de faire ce que les autres ont proposé (qui
est plus lisible mais peut-être plus lent) :
[ligne[0] for ligne in A]
Est-ce que je me trompe ? ou c'est kif kif dans tous les cas ?
c'est assez pythonique ? ... en tout cas c'est fonctionnel ;)
Ouh là là je trouve que c'est encore moins clair pour un profane ! ;-) Je cherche en fait une solution qui soit aussi élégante que ce que l'on fait avec Matlab :
A = [[1,2];[3,4]] A(:,1)
[1, 3]
Merci quand même !
de rien,
cette solution a l'avantage de ne pas dependre d'un import, et de marcher avec n'importe quel type de donnee, et d'eviter de copier la liste,
en plus c'est tres elegant... mais ce dernier point est subjectif ;)
Effectivement c'est plutôt élégant mais néanmoins peu compréhensible au premier abord... Je pense cependant que je vais l'adopter car je suppose que utiliser map est beaucoup plus rapide que de faire ce que les autres ont proposé (qui est plus lisible mais peut-être plus lent) : [ligne[0] for ligne in A]
Est-ce que je me trompe ? ou c'est kif kif dans tous les cas ?
Merci pour l'astuce en tout cas !
Christophe
On Thu, 10 Mar 2005 20:51:48 +0100, Amaury Forgeot d'Arc
Je butte sur un problème très simple et je ne trouve pas de solution élégante.
Soit la matrice A par exemple de dimension 2 : A = [[1,2],[3,4]]
donc A > > 1 2 3 4
Je souhaiterais sélectioner la première colonne, donc [1,3] et la seule méthode que j'ai trouvée est la suivante : [A[i][0] for i in range(len(A))]
Autant dire que ce n'est pas très lisible !
Quelqu'un aurait-il une méthode plus 'pythonique' ?
Merci,
Moi, j'écrirais: [a[0] for a in A] qui est plus simple que ton exemple, ou même: zip(*A)[0] Si si, ça marche ! zip peut servir à transposer une matrice... même si c'est moins lisible au premier coup d'oeil !
Effectivement à ma grande surprise avec zip ça marche aussi. Par contre je n'ai rien compris à ce que fais exactement zip (l'aide en ligne est incompréhensible pour moi) et je ne connais pas cette syntaxe avec l'* ?!? C'est comme en C ? ça s'utilise comme un pointeur ? ;-)
On Thu, 10 Mar 2005 20:51:48 +0100, Amaury Forgeot d'Arc
Je butte sur un problème très simple et je ne trouve pas de solution
élégante.
Soit la matrice A par exemple de dimension 2 :
A = [[1,2],[3,4]]
donc A > > 1 2
3 4
Je souhaiterais sélectioner la première colonne, donc [1,3] et la
seule méthode que j'ai trouvée est la suivante :
[A[i][0] for i in range(len(A))]
Autant dire que ce n'est pas très lisible !
Quelqu'un aurait-il une méthode plus 'pythonique' ?
Merci,
Moi, j'écrirais:
[a[0] for a in A]
qui est plus simple que ton exemple,
ou même:
zip(*A)[0]
Si si, ça marche ! zip peut servir à transposer une matrice...
même si c'est moins lisible au premier coup d'oeil !
Effectivement à ma grande surprise avec zip ça marche aussi.
Par contre je n'ai rien compris à ce que fais exactement zip (l'aide en
ligne est incompréhensible pour moi) et je ne connais pas cette syntaxe
avec l'* ?!? C'est comme en C ? ça s'utilise comme un pointeur ? ;-)
On Thu, 10 Mar 2005 20:51:48 +0100, Amaury Forgeot d'Arc
Je butte sur un problème très simple et je ne trouve pas de solution élégante.
Soit la matrice A par exemple de dimension 2 : A = [[1,2],[3,4]]
donc A > > 1 2 3 4
Je souhaiterais sélectioner la première colonne, donc [1,3] et la seule méthode que j'ai trouvée est la suivante : [A[i][0] for i in range(len(A))]
Autant dire que ce n'est pas très lisible !
Quelqu'un aurait-il une méthode plus 'pythonique' ?
Merci,
Moi, j'écrirais: [a[0] for a in A] qui est plus simple que ton exemple, ou même: zip(*A)[0] Si si, ça marche ! zip peut servir à transposer une matrice... même si c'est moins lisible au premier coup d'oeil !
Effectivement à ma grande surprise avec zip ça marche aussi. Par contre je n'ai rien compris à ce que fais exactement zip (l'aide en ligne est incompréhensible pour moi) et je ne connais pas cette syntaxe avec l'* ?!? C'est comme en C ? ça s'utilise comme un pointeur ? ;-)