[英]How to convert a column or row matrix to a diagonal matrix in Python?
我有一個行向量A,A = [a1 a2 a3 ..... an],我想創建一個對角矩陣B = diag(a1,a2,a3,.....,an)此行向量的元素。 如何在Python中完成?
更新
這是說明問題的代碼:
import numpy as np
a = np.matrix([1,2,3,4])
d = np.diag(a)
print (d)
該代碼的輸出為[1],但我想要的輸出為:
[[1 0 0 0]
[0 2 0 0]
[0 0 3 0]
[0 0 0 4]]
您可以使用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)
結果是:
[[1 0 0 0]
[0 2 0 0]
[0 0 3 0]
[0 0 0 4]]
如果您有行向量,則可以執行以下操作:
a = np.array([[1, 2, 3, 4]])
d = np.diag(a[0])
結果是:
[[1 0 0 0]
[0 2 0 0]
[0 0 3 0]
[0 0 0 4]]
對於問題中的給定矩陣:
import numpy as np
a = np.matrix([1,2,3,4])
d = np.diag(a.A1)
print (d)
結果再次是:
[[1 0 0 0]
[0 2 0 0]
[0 0 3 0]
[0 0 0 4]]
我想您也可以使用diagflat :
import numpy
a = np.matrix([1,2,3,4])
d = np.diagflat(a)
print (d)
就像diag方法那樣
[[1 0 0 0]
[0 2 0 0]
[0 0 3 0]
[0 0 0 4]]
但無需使用.A1進行展平
另一個解決方案可能是:
import numpy as np
a = np.array([1,2,3,4])
d = a * np.identity(len(a))
至於演出在這里的各種答案,我得到timeit
在10萬次重復:
np.array
和np.diag
(Marcin的答案):2.18E-02秒 np.array
和np.identity
(這個答案):6.12E-01 s np.matrix
和np.diagflat
( np.diagflat
的答案):1.00E-00 s 假設您根據標簽在numpy中工作,則可以這樣做:
import numpy
def make_diag( A ):
my_diag = numpy.zeroes( ( 2, 2 ) )
for i, a in enumerate( A ):
my_diag[i,i] = a
return my_diag
enumerate(LIST)在列表上創建一個迭代器,該迭代器返回如下元組:
(0,第一個元素),(1,第二個元素),...(N-1,第N個元素)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.