簡體   English   中英

從張量流中矩陣的行創建診斷矩陣

[英]Create diagnoal matrix from rows of a matrix in tensorflow

我想從另一個矩陣的行創建一個對角矩陣。 例如,如果給定的矩陣是:

 M=[e_1,e_2,e_3] 

其中 $e_i$, i=1,2,3, 是一個向量。 現在我的輸出如下所示:

N = [e_1,0,0
      0, e_2,0
      0,0, e_3
    ]

假設上述矩陣中的 0 是適當大小的零塊。 編輯:輸出示例在此處輸入圖片說明

你可以試試這個:

e_1 = np.array([1,2,3])
e_2 = np.array([4,5,6])
e_3 = np.array([7,8,9])

M = [e_1, e_2, e_3]

# output = np.hstack(np.eye(e_1.shape[0])[:,:,None] * M)
output = np.hstack(np.eye(len(M))[:,:,None] * M)

輸出:

array([[1., 2., 3., 0., 0., 0., 0., 0., 0.],
       [0., 0., 0., 4., 5., 6., 0., 0., 0.],
       [0., 0., 0., 0., 0., 0., 7., 8., 9.]])

開箱:

>>> np.eye(e_1.shape[0])

array([[1., 0., 0.],
       [0., 1., 0.],
       [0., 0., 1.]])

>>> np.eye(e_1.shape[0])[..., None]

array([[[1.],
        [0.],
        [0.]],

       [[0.],
        [1.],
        [0.]],

       [[0.],
        [0.],
        [1.]]])
  1. np.hstack水平連接數組。

  2. np.eye返回給定形狀的單位矩陣。

  3. np.array()[..., None] 為數組添加了另一個維度。 這相當於np.newaxis ,也可以通過np.expand_dims實現。

編輯: len(M)將確保輸出中的行數等於輸入向量的數量。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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