gpt4 book ai didi

python - 使用 numpy 将向量添加到矩阵的特定行

转载 作者:行者123 更新时间:2023-12-01 08:22:56 24 4
gpt4 key购买 nike

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

该列表定义用矩阵 m1 的行替换矩阵 m2 的值,位置为 [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]

关于python - 使用 numpy 将向量添加到矩阵的特定行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54507126/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com