[英]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.