簡體   English   中英

使用 numpy 將向量添加到矩陣的特定行

[英]Adding a vector to a specific row of a matrix with numpy

嘿,我想嘗試使用 numpy 解決以下問題:給定兩個不同大小的二次矩陣和一個包含行索引信息的文本文件。 我想將較小矩陣的行添加到相應索引處較大矩陣的行中。 例如:

小矩陣給出為

    1 2 3 
    4 5 6
    7 8 9

大矩陣是一個零矩陣,例如大小為 8

    0 0 0 0 0 0 0 0
    0 0 0 0 0 0 0 0
    0 0 0 0 0 0 0 0
    0 0 0 0 0 0 0 0
    0 0 0 0 0 0 0 0
    0 0 0 0 0 0 0 0
    0 0 0 0 0 0 0 0
    0 0 0 0 0 0 0 0

文本文件現在具有以下條目:

    1
    3
    6

現在必須將較小矩陣的第一行添加到較大矩陣的第一行。 第二行到第三行,最后一行加到第六行即

    1 2 3 0 0 0 0 0
    0 0 0 0 0 0 0 0
    0 0 4 5 6 0 0 0
    0 0 0 0 0 0 0 0
    0 0 0 0 0 0 0 0
    0 0 0 0 0 7 8 9
    0 0 0 0 0 0 0 0
    0 0 0 0 0 0 0 0      

我嘗試了很多 for 循環,但它根本不起作用。

假設您有 2 個矩陣:

import numpy as np

m1 = np.matrix([[1, 2, 3], [4, 5, 6], [7, 8, 9,]])
m2 = np.empty([8, 8])
m2.fill(0)

並定義了一個職位列表:

li = [1, 3, 6]

該列表定義將矩陣m2值替換為矩陣m1的行,位於[0][0:2][2][2:4][5][5:7]

numpy 數組的值可以替換為numpy.put()
計算要替換的值的索引並替換值:

ri = [(v-1) * m2.shape[1] + v - 1 + j for v in li for j in range(m1.shape[1])]
np.put(m2, ri, m1)

輸出:

print(m1)
print(li)
print(m2)
 [[1 2 3] [4 5 6] [7 8 9]] [1, 3, 6] [[1. 2. 3. 0. 0. 0. 0. 0.] [0. 0. 0. 0. 0. 0. 0. 0.] [0. 0. 4. 5. 6. 0. 0. 0.] [0. 0. 0. 0. 0. 0. 0. 0.] [0. 0. 0. 0. 0. 0. 0. 0.] [0. 0. 0. 0. 0. 7. 8. 9.] [0. 0. 0. 0. 0. 0. 0. 0.] [0. 0. 0. 0. 0. 0. 0. 0.]]

如果您不想替換索引,但要將值添加到當前矩陣,那么您必須在循環中對這些值求和,而不是用np.put替換:

for i in range(len(ri)):
    m2.flat[ri[i]] += m1.flat[i] 

暫無
暫無

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

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