Python: Concaténer (ou clone) un tableau numpy N fois

je veux créer un tableau MXN numpy en clonant un MX1 ndarray N fois. Y a-t-il un moyen pythonique efficace de faire cela au lieu de boucler?

Btw la façon suivante ne fonctionne pas pour moi (X est mon tableau Mx1):

   numpy.concatenate((X, numpy.tile(X,N)))

puisqu'il a créé un tableau [M*N,1] au lieu de [M,N]

21
demandé sur chefarov 2014-03-25 16:13:45

3 réponses

Vous êtes proche, vous souhaitez utiliser np.tile, mais comme ceci:

a = np.array([0,1,2])
np.tile(a,(3,1))

Résultat:

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

Si vous appelez np.tile(a,3) vous obtiendrez concatenate comportement comme vous avez été voir

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

http://docs.scipy.org/doc/numpy/reference/generated/numpy.tile.html

37
répondu CoryKramer 2014-03-25 12:22:40

Vous pouvez utiliser vstack:

numpy.vstack([X]*N)

par exemple

    >>> import numpy as np
    >>> X = np.array([1,2,3,4])
    >>> N = 7
    >>> np.vstack([X]*N)
    array([[1, 2, 3, 4],
           [1, 2, 3, 4],
           [1, 2, 3, 4],
           [1, 2, 3, 4],
           [1, 2, 3, 4],
           [1, 2, 3, 4],
           [1, 2, 3, 4],
           [1, 2, 3, 4],
           [1, 2, 3, 4]])
8
répondu atomh33ls 2014-03-25 13:11:53

Avez-vous essayé ceci:

n = 5
X = numpy.array([1,2,3,4])
Y = numpy.array([X for _ in xrange(n)])
print Y
Y[0][1] = 10
print Y

imprime:

[[1 2 3 4]
 [1 2 3 4]
 [1 2 3 4]
 [1 2 3 4]
 [1 2 3 4]]

[[ 1 10  3  4]
 [ 1  2  3  4]
 [ 1  2  3  4]
 [ 1  2  3  4]
 [ 1  2  3  4]]
1
répondu Samy Arous 2014-03-25 12:22:14