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)
4 Réponses :
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
)
Votre code est plus court que le mien. et merci de commenter que nous devrions éviter from numpy import *
. Merci.
Vous pouvez également utiliser np.repeat
, par exemple
np.repeat(np.arange(3)[None,:],4,axis=0)
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.
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
.
@maech très court et plus rapide, si vous me demandez.
É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