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