2016-07-27 4 views
2

Angenommen, ich habe eine n × m Array, das heißt:3D-Array aus einem 2D-Array durch Replizieren/entlang der ersten Achse zu wiederholen

array([[ 1., 2., 3.], 
     [ 4., 5., 6.], 
     [ 7., 8., 9.]]) 

Und ich, was ein 3D-Array k × n × m zu erzeugen, in dem alle Felder in der neue Achsen sind gleich, dh: das gleiche Array aber jetzt 3 × 3 × 3.

array([[ 1., 2., 3.], 
     [ 4., 5., 6.], 
     [ 7., 8., 9.]], 

     [[ 1., 2., 3.], 
     [ 4., 5., 6.], 
     [ 7., 8., 9.]], 

     [[ 1., 2., 3.], 
     [ 4., 5., 6.], 
     [ 7., 8., 9.]]]) 

Wie kann ich es bekommen?

Antwort

2

Führen Sie eine neue Achse am Anfang mit None/np.newaxis ein und replizieren Sie mit np.repeat. Dies sollte funktionieren, um alle n Dim-Arrays auf Dim-Arrays zu erweitern. Die Umsetzung wäre -

np.repeat(arr[None,...],k,axis=0) 

Probelauf -

In [143]: arr 
Out[143]: 
array([[ 1., 2., 3.], 
     [ 4., 5., 6.], 
     [ 7., 8., 9.]]) 

In [144]: np.repeat(arr[None,...],3,axis=0) 
Out[144]: 
array([[[ 1., 2., 3.], 
     [ 4., 5., 6.], 
     [ 7., 8., 9.]], 

     [[ 1., 2., 3.], 
     [ 4., 5., 6.], 
     [ 7., 8., 9.]], 

     [[ 1., 2., 3.], 
     [ 4., 5., 6.], 
     [ 7., 8., 9.]]]) 
0

, wenn Sie:

a = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] 

Sie können eine Liste Verständnis verwenden, um die doppelte Array zu erzeugen:

b = [a for x in range(3)] 

Dann (für numpy):

c = array(b) 
0

Eine Möglichkeit wäre, Standard Rundfunk zu verwenden, um Ihren Array zu replizieren:

a = np.arange(1, 10).reshape(3,3) 
n = 3 
b = np.ones((n, 3, 3)) * a 

, die in der Reihe führen Sie wollten:

array([[[ 1., 2., 3.], 
     [ 4., 5., 6.], 
     [ 7., 8., 9.]], 

     [[ 1., 2., 3.], 
     [ 4., 5., 6.], 
     [ 7., 8., 9.]], 

     [[ 1., 2., 3.], 
     [ 4., 5., 6.], 
     [ 7., 8., 9.]]]) 

Dies wird standardmäßig nicht funktionieren, wenn Sie möchten es entlang einer anderen Achse replizieren. In diesem Fall müssen Sie die Abmessungen explizit angeben, um eine korrekte Übertragung sicherzustellen.

Verwandte Themen