2
votes

Code le plus court pour répéter le tableau ([x, y, z]) en Python

Quel est le code le plus court pour répéter le array([x,y,z]) numpy array([x,y,z]) et créer un array([[x,y,z], [x,y,z], [x,y,z], ...]) pour créer le code comme indiqué ci-dessous:

array([[1, 2, 3],
       [1, 2, 3],
       [1, 2, 3],
       [1, 2, 3],
       [1, 2, 3],
       [1, 2, 3],
       [1, 2, 3],
       [1, 2, 3],
       [1, 2, 3],
       [1, 2, 3]])

sortie du code:

import numpy as np
p = np.array([1, 2, 3])
n = 10
p_n = np.tile(p, n).reshape(n, 3)


0 commentaires

4 Réponses :


2
votes

Votre code fonctionne plutôt bien. Je ne vois pas l'intérêt de raccourcir quelques caractères.

Cela dit, voici une option plus courte (de quelques caractères)

p_n = np.vstack([p]*n)

Remarque : évitez l' from numpy import * . Numpy a trop de choses et il peut casser certaines des fonctionnalités par défaut de Python (par exemple bool )


1 commentaires

Votre code est plus court que le mien. et merci de commenter que nous devrions éviter from numpy import * . Merci.



1
votes

Vous pouvez également utiliser np.repeat , par exemple

np.repeat(np.arange(3)[None,:],4,axis=0)


2 commentaires

Cela fonctionne aussi. Mais il est difficile de se rappeler comment écrire le code de tranche [None,:] pour moi ^^


Vous pouvez ajouter cette dimension à p dès le début, np.array([[1,2,3]]).repeat(n,0) . Mais l'utilisation de la syntaxe [None,:] devrait devenir familière; c'est très utile.



2
votes

Si vous avez déjà préparé un tableau qui stocke les coordonnées répétées, alors c'est assez court:

p_n[:] = p

C'est utile si vous attribuez plusieurs fois à p_n .


1 commentaires

@maech très court et plus rapide, si vous me demandez.



1
votes

Étant donné le tableau p et le nombre de mise à l'échelle n , le plus court serait (sans aucune fonction pour l'aider à le rendre court) -

In [17]: p+[[0]]*n
Out[17]: 
array([[1, 2, 3],
       [1, 2, 3],
       [1, 2, 3],
       [1, 2, 3],
       [1, 2, 3],
       [1, 2, 3],
       [1, 2, 3],
       [1, 2, 3],
       [1, 2, 3],
       [1, 2, 3]])

Exemple d'exécution -

p_n = p+[[0]]*n


0 commentaires