una transponer sumatoria multiplicacion matriz matrices inversa crear array python arrays numpy list-comprehension

python - transponer - ¿Aplanando una lista de matrices NumPy?



sumatoria numpy python (2)

Parece que tengo datos en el formato de una lista de matrices NumPy ( type() = np.ndarray ):

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

Estoy tratando de poner esto en una función polyfit:

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

Sin embargo, devuelve el error: TypeError: expected 1D vector for x

Supongo que necesito aplanar mis datos en algo como:

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

He intentado una comprensión de lista que normalmente funciona en listas de listas, pero esto no funcionó:

[val for sublist in risks for val in sublist]

Cuál sería la mejor forma de hacer esto?


Encontré este mismo problema y encontré una solución que combina matrices numpy 1-D de longitud variable:

np.column_stack(input_list).ravel()

Ver numpy.column_stack para más información.

Ejemplo con matrices de longitud variable con sus datos de ejemplo:

In [135]: input_list Out[135]: [array([[ 0.00353654, 0.00353654]]), array([[ 0.00353654]]), array([[ 0.00353654]]), array([[ 0.00353654, 0.00353654, 0.00353654]])] In [136]: [i.size for i in input_list] # variable size arrays Out[136]: [2, 1, 1, 3] In [137]: np.column_stack(input_list).ravel() Out[137]: array([ 0.00353654, 0.00353654, 0.00353654, 0.00353654, 0.00353654, 0.00353654, 0.00353654])

Nota: Solo probado en Python 2.7.12


Podría usar numpy.concatenate , que como su nombre lo indica, básicamente concatena todos los elementos de dicha lista de entrada en una única matriz NumPy, como por ejemplo:

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

Si desea que la salida final sea una lista, puede extender la solución, como así:

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

Ejecución de la muestra

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

Convertir a la lista -

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]