如何在Python中将列或行矩阵转换为对角矩阵?

Tom*_*gal 19 python numpy matrix scipy

我有一个行向量A,A = [a1 a2 a3 ..... an]我想创建一个对角矩阵,B = diag(a1,a2,a3,.....,an)这行矢量的元素.如何在Python中完成?

UPDATE

这是用来说明问题的代码:

import numpy as np
a = np.matrix([1,2,3,4])
d = np.diag(a)
print (d)
Run Code Online (Sandbox Code Playgroud)

这段代码的输出是[1],但我想要的输出是:

[[1 0 0 0]
 [0 2 0 0]
 [0 0 3 0]
 [0 0 0 4]]
Run Code Online (Sandbox Code Playgroud)

Mar*_*cin 38

您可以使用diag方法:

import numpy as np

a = np.array([1,2,3,4])
d = np.diag(a)
# or simpler: d = np.diag([1,2,3,4])

print(d)
Run Code Online (Sandbox Code Playgroud)

结果是:

[[1 0 0 0]
 [0 2 0 0]
 [0 0 3 0]
 [0 0 0 4]]
Run Code Online (Sandbox Code Playgroud)

如果你有一个行向量,你可以这样做:

a = np.array([[1, 2, 3, 4]])
d = np.diag(a[0])
Run Code Online (Sandbox Code Playgroud)

结果是:

[[1 0 0 0]
 [0 2 0 0]
 [0 0 3 0]
 [0 0 0 4]]
Run Code Online (Sandbox Code Playgroud)

对于问题中的给定矩阵:

import numpy as np
a = np.matrix([1,2,3,4])
d = np.diag(a.A1)
print (d)
Run Code Online (Sandbox Code Playgroud)

结果又是:

[[1 0 0 0]
 [0 2 0 0]
 [0 0 3 0]
 [0 0 0 4]]
Run Code Online (Sandbox Code Playgroud)


小智 6

我想你也可以使用diagflat:

import numpy
a = np.matrix([1,2,3,4])
d = np.diagflat(a)
print (d)
Run Code Online (Sandbox Code Playgroud)

这与diag方法的结果相同

[[1 0 0 0]
 [0 2 0 0]
 [0 0 3 0]
 [0 0 0 4]]
Run Code Online (Sandbox Code Playgroud)

但是没有必要用.A1扁平化