簡體   English   中英

如何在Python中將列或行矩陣轉換為對角矩陣?

[英]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萬次重復:

  1. np.arraynp.diag (Marcin的答案):2.18E-02秒
  2. np.arraynp.identity (這個答案):6.12E-01 s
  3. np.matrixnp.diagflatnp.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM