2013-04-26 28 views
12

Ho un array Python semplice, unidimensionale con numeri casuali. Quello che voglio fare è convertirlo in una matrice numpy di una forma specifica. Il mio tentativo in corso si presenta così:Converti matrice 1D in matrice numpy

randomWeights = [] 
for i in range(80): 
    randomWeights.append(random.uniform(-1, 1)) 
W = np.mat(randomWeights) 
W.reshape(8,10) 

Purtroppo crea sempre una matrice di forma:

[[random1, random2, random3, ...]]

Quindi solo il primo elemento di una dimensione viene utilizzata e il comando di rimodella non ha alcun effetto. C'è un modo per convertire l'array 1D in una matrice in modo che i primi elementi x siano la riga 1 della matrice, i successivi elementi x saranno la riga 2 e così via?

Fondamentalmente questo sarebbe il forma desiderata:

[[1, 2, 3, 4, 5, 6, 7, 8], 
[9, 10, 11, ... , 16], 
[...,    800]] 

Suppongo di poter sempre costruire una nuova matrice nella forma desiderata manualmente analizzando attraverso l'array di input. Ma mi piacerebbe sapere se esiste una soluzione più semplice e più elegante con funzioni integrate che non vedo. Se devo costruire manualmente queste matrici, avrò un sacco di lavoro extra in altre aree del codice, dal momento che tutti i miei dati sorgente vengono forniti in semplici array 1D ma saranno calcolati come matrici.

risposta

18

reshape() non rimodellare in atto, è necessario assegnare il risultato:

>>> W = W.reshape(8,10) 
>>> W.shape 
(8,10)