首页 > 解决方案 > 如果矩阵包含值,如何修改列表?

问题描述

我有一个包含值的列表,[5, 5, 5, 5, 5]我有一个充满 1 和 0 的矩阵。

我想要一个必须像这样的新列表:如果矩阵中有一个 1,那么如果它是第一行,则将一个 '2' 与 v 的值相加,并且将一个 '3' 相加它是第二行。

例子:

列表:

v = [5,5,5,5,5] 

矩阵:

m = [[0, 1, 1, 0, 0], [0, 0, 1, 1, 0]]

最后结果:

v1 = [5,7,10,8,5]

标签: python

解决方案


经典蟒蛇:

您可以使用循环理解:

to_add = [sum((A*B) for A,B in zip(factors,x)) for x in zip(*m)]
[a+b for a,b in zip(v, to_add)]

输出:[5, 7, 10, 8, 5]

麻木:

也就是说,这是 numpy 的一个完美用例,它更高效、更简洁:

import numpy as np

v = [5,5,5,5,5]
m = [[0, 1, 1, 0, 0], [0, 0, 1, 1, 0]]
factors = [2,3]

V = np.array(v)
M = np.array(m)
F = np.array(factors)

V+(M*F[:,None]).sum(0)

输出:array([ 5, 7, 10, 8, 5])


推荐阅读