¿Asignando valores complejos a matrices numpy?

Esto da el resultado esperado.

x = random.rand(1) + random.rand(1)*1j print x.dtype print x, x.real, x.imag 

y esto funciona

 C = zeros((2,2),dtype=complex) C[0,0] = 1+1j print C 

pero si lo cambiamos a

 C[0,0] = 1+1j + x 

Me sale “TypeError: no se puede convertir complejo a flotar”.

Si ahora omitimos el explícito dtype = complex , obtengo “ValueError: configurando un elemento de matriz con una secuencia”.

¿Puede alguien explicar qué está pasando y cómo hacerlo sin errores? Estoy perdido.

Para insertar algo complejo de x o x + something en C , aparentemente necesitas tratarlo como si fuera una matriz, por lo tanto, indiza en x o asignalo a una porción de C :

 >>> C array([[ 0.+0.j, 0.+0.j], [ 0.+0.j, 0.+0.j]]) >>> C[0, 0:1] = x >>> C array([[ 0.47229555+0.7957525j, 0.00000000+0.j ], [ 0.00000000+0.j , 0.00000000+0.j ]]) >>> C[1, 1] = x[0] + 1+1j >>> C array([[ 0.47229555+0.7957525j, 0.00000000+0.j ], [ 0.00000000+0.j , 1.47229555+1.7957525j]]) 

Parece que NumPy no está manejando este caso correctamente. Considere enviar un informe de error.

En realidad, ninguna de las soluciones propuestas funcionó en mi caso (Python 2.7.6, NumPy 1.8.2). Pero me he dtype de que el cambio de dtype de complex (biblioteca estándar de Python) a numpy.complex_ puede ayudar:

 >>> import numpy as np >>> x = 1 + 2 * 1j >>> C = np.zeros((2,2),dtype=np.complex_) >>> C array([[ 0.+0.j, 0.+0.j], [ 0.+0.j, 0.+0.j]]) >>> C[0,0] = 1+1j + x >>> C array([[ 2.+3.j, 0.+0.j], [ 0.+0.j, 0.+0.j]])