python - 如果矩阵包含值,如何修改列表?
问题描述
我有一个包含值的列表,[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]
解决方案
经典蟒蛇:
您可以使用循环理解:
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])
推荐阅读
- lambda - 为什么 lambda 函数返回一个过程?
- android - 在 onSaveInstanceState() 之后多次调用 writeToParcel() 导致内存泄漏
- php - PHP imagecopy 函数根据主图像的高度和宽度改变图章大小
- java - Java命令提示符中无法识别的cmd windows路径和环境变量
- c# - C# - 显示重复的随机数
- android - 折叠工具栏不与 RecyclerView 折叠
- c# - TaskCompletionSource 永远不会完成
- azure-active-directory - 在 Azure AD 的 SAML 请求中应将颁发者设置为什么
- gitlab - 无法将本地项目推送到 gitlab
- c# - 阅读器循环不适用于字符串中的参数