嘿,我想尝试解决使用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]