2015-11-14 13 views
18

Sembra che io ho i dati nel formato di un elenco di array NumPy (type() = np.ndarray):Appiattimento di un elenco di array NumPy?

[array([[ 0.00353654]]), array([[ 0.00353654]]), array([[ 0.00353654]]), 
array([[ 0.00353654]]), array([[ 0.00353654]]), array([[ 0.00353654]]), 
array([[ 0.00353654]]), array([[ 0.00353654]]), array([[ 0.00353654]]), 
array([[ 0.00353654]]), array([[ 0.00353654]]), array([[ 0.00353654]]), 
array([[ 0.00353654]])] 

Sto cercando di mettere questo in una funzione polyfit:

m1 = np.polyfit(x, y, deg=2) 

Tuttavia, restituisce l'errore: TypeError: expected 1D vector for x

presumo che ho bisogno di appiattire i miei dati in qualcosa di simile:

[0.00353654, 0.00353654, 0.00353654, 0.00353654, 0.00353654, 0.00353654 ...] 

Ho provato una lista di comprensione che di solito lavora su liste di liste, ma questo come previsto non ha funzionato:

[val for sublist in risks for val in sublist] 

Quale sarebbe il modo migliore per farlo?

+0

@Divakar Grazie! Per me va bene! –

+0

concatenate presuppone che tutti gli array abbiano le stesse dimensioni, il che potrebbe sempre essere il tuo caso, altrimenti controlla qualcosa come http://stackoverflow.com/a/406822/1240268. –

risposta

14

Si potrebbe utilizzare numpy.concatenate, che come suggerisce il nome, concatena in pratica tutti gli elementi di una tale lista di input in un singolo array NumPy, in questo modo -

import numpy as np 
out = np.concatenate(input_list).ravel() 

Se si desidera che il risultato finale sia un lista, è possibile estendere la soluzione, in questo modo -

out = np.concatenate(input_list).ravel().tolist() 

campione run -

In [24]: input_list 
Out[24]: 
[array([[ 0.00353654]]), 
array([[ 0.00353654]]), 
array([[ 0.00353654]]), 
array([[ 0.00353654]]), 
array([[ 0.00353654]]), 
array([[ 0.00353654]]), 
array([[ 0.00353654]]), 
array([[ 0.00353654]]), 
array([[ 0.00353654]]), 
array([[ 0.00353654]]), 
array([[ 0.00353654]]), 
array([[ 0.00353654]]), 
array([[ 0.00353654]])] 

In [25]: np.concatenate(input_list).ravel() 
Out[25]: 
array([ 0.00353654, 0.00353654, 0.00353654, 0.00353654, 0.00353654, 
     0.00353654, 0.00353654, 0.00353654, 0.00353654, 0.00353654, 
     0.00353654, 0.00353654, 0.00353654]) 

Convert to list -

In [26]: np.concatenate(input_list).ravel().tolist() 
Out[26]: 
[0.00353654, 
0.00353654, 
0.00353654, 
0.00353654, 
0.00353654, 
0.00353654, 
0.00353654, 
0.00353654, 
0.00353654, 
0.00353654, 
0.00353654, 
0.00353654, 
0.00353654] 
+0

così facendo, ottengo 'ValueError: tutte le dimensioni dell'array di input tranne l'asse di concatenazione devono corrispondere esattamente a ' – Athena

+0

@Athena Posta una nuova domanda per favore. Non è chiaro quale sia esattamente il formato dei dati. – Divakar

Problemi correlati