添加载体与numpy的一个矩阵的特定行

问题描述 投票:1回答:1

嘿,我想尝试解决使用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循环尝试过,但它是不工作的。

python
1个回答
1
投票

让我们假设你有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] 
© www.soinside.com 2019 - 2024. All rights reserved.