¿Cómo hacer matriz en matriz diagonal en números?

matriz dada

x = matrix([[ 0.9, 0.14], [ 0.15, 0.8]]) 

¿cómo se puede convertir la primera columna, x[:,0] , en una matriz diagonal en números? Llegar:

 matrix([[0.9, 0], [0, 0.15]]) 

 numpy.diag( xA[ :, 0 ] ) 

Deberías hacerlo.

La diferencia entre una matrix y una array es crucial aquí. No obtendrá el mismo resultado solo con numpy.diag( x[ :, 0 ] ) . xA es una abreviatura de numpy.asarray( x ) cuando x es una matrix .

Entonces, de la misma manera, para responder a su pregunta precisamente, supongo que no debería olvidar volver a convertir la respuesta de una array a una matrix :

 numpy.matrix( numpy.diag( xA[ :, 0 ] ) ) 

Hay un diagflat que ‘Crea una matriz bidimensional con la entrada aplanada como una diagonal’. Ambas ravels la entrada y envuelven el resultado en np.matrix (que coincide con el tipo de matriz de entrada):

 In [122]: np.diagflat(x[:,0]) Out[122]: matrix([[ 0.9 , 0. ], [ 0. , 0.15]]) 

Así que está haciendo todo el trabajo de jez , simplemente envolviéndolo en una función generalizada:

 np.matrix(np.diag(np.asarray(x[:,0]).ravel()))