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扁平化