numpy array 1.9.2 obteniendo ValueError: no se pudo transmitir el array de entrada desde shape (4,2) a shape (4)

El siguiente fragmento de código funcionaba en numpy 1.7.1 pero está dando un error de valor en la versión actual. Quiero saber la causa raíz de ello.

import numpy as np x = [1,2,3,4] y = [[1, 2],[2, 3], [1, 2],[2, 3]] a = np.array([x, np.array(y)]) 

A continuación se muestra la salida que recibo en numpy 1.7.1

 >>>a array([[1, 2, 3, 4], [array([1, 2]), array([2, 3]), array([1, 2]), array([2, 3])]], dtype=object) 

Pero el mismo código produce error en la versión 1.9.2.

  ----> 5 a = np.array([x, np.array(y)]) ValueError: could not broadcast input array from shape (4,2) into shape (4) 

He encontrado una posible solución al esto. Pero no sé si esto es lo mejor que se puede hacer.

 b= np.empty(2, dtype=object) b[:] = [x, np.array(y)] >>> b array([[1, 2, 3, 4], array([[1, 2], [2, 3], [1, 2], [2, 3]])], dtype=object) 

Por favor, sugiera una solución para lograr el resultado deseado. Gracias

¿Qué es exactamente lo que estás tratando de producir? No tengo una versión 1.7 para probar tu ejemplo.

np.array(x) produce una matriz (4,) . np.array(y) a (4,2) .

Como se señaló en un comentario, en 1.8.1 np.array([x, np.array(y)]) produce

 ValueError: setting an array element with a sequence. 

Puedo hacer una matriz de dtype de objeto, que consiste en la lista y la matriz

 In [90]: np.array([x, np.array(y)],dtype=object) Out[90]: array([[1, 2, 3, 4], [array([1, 2]), array([2, 3]), array([1, 2]), array([2, 3])]], dtype=object) 

También puedo concatenar 2 matrices para hacer una matriz ( (4,3) ( x es la primera columna)

 In [92]: np.concatenate([np.array(x)[:,None],np.array(y)],axis=1) Out[92]: array([[1, 1, 2], [2, 2, 3], [3, 1, 2], [4, 2, 3]]) 

np.column_stack([x,y]) hace lo mismo.


Curiosamente en un dev 1.9 (no tengo la producción 1.9.2 instalada) funciona (más o menos)

 In [9]: np.__version__ Out[9]: '1.9.0.dev-Unknown' In [10]: np.array([x,np.array(y)]) Out[10]: array([[ 1, 2, 3, 4], [174420780, 175084380, 16777603, 0]]) In [11]: np.array([x,np.array(y)],dtype=object) Out[11]: array([[1, 2, 3, 4], [None, None, None, None]], dtype=object) In [16]: np.array([x,y],dtype=object) Out[16]: array([[1, 2, 3, 4], [[1, 2], [2, 3], [1, 2], [2, 3]]], dtype=object) 

Así que parece que hay algún tipo de desarrollo en marcha.

En cualquier caso, hacer una nueva matriz de esta lista y una matriz 2d es ambigua. Use column_stack (suponiendo que desea una matriz 2d int).


Numpy 1.9.0 notas de la versión:

Se ha mejorado el rendimiento de la conversión de listas que contienen matrices a matrices utilizando np.array. Ahora es equivalente en velocidad a np.vstack (lista).

Con trabajos transpuestos y vstack :

 In [125]: np.vstack([[1,2,3,4],np.array([[1,2],[2,3],[1,2],[2,3]]).T]) Out[125]: array([[1, 2, 3, 4], [1, 2, 1, 2], [2, 3, 2, 3]]) 

Si funcionaba 1.7.1, x eran nombres de cadena, no solo los ints como en su ejemplo, entonces probablemente estaba produciendo una matriz de objetos.