2015-01-25 3 views

ответ

2
numpy.diag(x.A[ :, 0 ]) 

должны это сделать.

Здесь важна разница между matrix и array. Вы не получите тот же результат от numpy.diag(x[ :, 0 ]). x.A является сокращением на numpy.asarray(x), когда x является matrix.

Так к тому же, чтобы ответить на ваш вопрос точно я предполагаю, что я не должен забывать преобразовать ответ от array обратно к matrix:

numpy.matrix(numpy.diag(x.A[ :, 0 ])) 
+0

это дает numpy массив назад с одним элементом, а не диагональной матрицей с нулями – user248237dfsf

+0

@ user248237dfsf не для меня. Возвращаемое значение: 'array ([[0.9, 0.], [0., 0.15]]). См. Править. «.A» имеет решающее значение. – jez

3

Существует diagflat, что «Создание двух- мерный массив с плоским входом как диагональ. '. Это как ravels вход и оборачивает результат в np.matrix (соответствующий входной тип массива):

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

Таким образом, это делает всю работу jez ответа, просто завернув в обобщенной функции:

np.matrix(np.diag(np.asarray(x[:,0]).ravel())) 
Смежные вопросы