2014-03-25 14 views
16

Ich möchte ein MxN numpy Array erstellen, indem Sie ein Mx1 ndarray N-mal klonen. Gibt es eine effiziente Python-Methode, um das zu tun, anstatt zu loopen?Python: Verketten (oder Klonen) eines numpy Array N mal

Btw die folgende Art und Weise für mich nicht funktioniert (X mein Mx1- Array):

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

, da sie erstellt ein [M * ​​N, 1] Array anstelle von [M, N]

+1

'Kachel (X, N)' wird es tun. – gg349

+1

Der (num) pythonische Weg ist nicht das, sondern [broadcasting] (http://scipy-lectures.github.io/intro/numpy/numpy.html#broadcasting) anstelle von 'tile' und' repmat' zu verwenden und dergleichen. – YXD

+1

Sie müssen es möglicherweise nicht erweitern. Wenn es beispielsweise mit einer [M, N] - oder [1, N] -Matrix addiert oder multipliziert wird, ist das Ergebnis [M, N]. 'numpy' überträgt es für dich. In der Tat könnten Sie das verwenden, um das Array zu erweitern: 'X + np.zeros (N)'. – hpaulj

Antwort

31

Sie schließen sind, möchten Sie np.tile verwenden, aber wie folgt aus:

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

Ergebnis:

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

Wenn Sie rufen np.tile(a,3) Sie concatenate Verhalten bekommen, wie Sie

array([0, 1, 2, 0, 1, 2, 0, 1, 2]) 
zu sehen waren

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

+0

danke das funktioniert. Ich dachte, ich hätte einen Spaltenvektor, aber ich hatte eine Reihe. – chefarov

1

Haben Sie versucht:

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 

druckt:

[[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]] 
+0

Das funktioniert auch. Danke – chefarov

6

könnten Sie verwenden vstack:

numpy.vstack([X]*N) 

z.B.

>>> 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]])