¿Cómo convierto una matriz de matrices en una matriz multidimensional en Python?

Tengo una matriz NumPy (de longitud X) de matrices, todas ellas de la misma longitud (Y), pero que tienen el tipo “objeto” y, por lo tanto, tienen dimensión (X,). Me gustaría “convertir” esto en una matriz de dimensión (X, Y) con el tipo de los elementos de las matrices de miembros (“flotar”).

La única manera que puedo ver para hacer esto es “manualmente” con algo como

[x for x in my_array] 

¿Hay un mejor lenguaje para lograr esta “conversión”?


Por ejemplo tengo algo como:

 array([array([ 0., 0., 1., 0., 0., 0., 0., 0., 0., 0.]), array([ 0., 1., 0., 0., 0., 0., 0., 0., 0., 0.]), array([ 0., 0., 1., 0., 0., 0., 0., 0., 0., 0.]), ..., array([ 0., 0., 0., 0., 0., 0., 0., 0., 0., 1.]), array([ 0., 0., 0., 0., 0., 0., 0., 1., 0., 0.]), array([ 0., 0., 0., 0., 0., 0., 0., 0., 0., 1.])], dtype=object) 

que tiene shape (X) en lugar de (X, 10).

Puede concatenar las matrices en un nuevo eje. Por ejemplo:

 In [1]: a=np.array([1,2,3],dtype=object) ...: b=np.array([4,5,6],dtype=object) 

Para hacer una matriz de matrices no podemos simplemente combinarlas con una array , como lo hizo la respuesta eliminada:

 In [2]: l=np.array([a,b]) In [3]: l Out[3]: array([[1, 2, 3], [4, 5, 6]], dtype=object) In [4]: l.shape Out[4]: (2, 3) 

En su lugar, tenemos que crear una matriz vacía de la forma correcta y rellenarla:

 In [5]: arr = np.empty((2,), object) In [6]: arr[:]=[a,b] In [7]: arr Out[7]: array([array([1, 2, 3], dtype=object), array([4, 5, 6], dtype=object)], dtype=object) 

np.stack actúa como np.array , pero utiliza concatenate :

 In [8]: np.stack(arr) Out[8]: array([[1, 2, 3], [4, 5, 6]], dtype=object) In [9]: _.astype(float) Out[9]: array([[ 1., 2., 3.], [ 4., 5., 6.]]) 

También podríamos usar concatenate , hstack o vstack para combinar los arreglos en diferentes ejes. Todos tratan la matriz de matrices como una lista de matrices.

Si arr es 2d (o más alto) primero tenemos que ravel .