首先我是个Python新手。我的任务是编写类似的代码,更容易变体的层次分析法(ahp)。我不允许带任何像numpy这样的包裹。
我需要一个列表输入n*就像:
liste = [[1.0,2.0,3.0],[4.0,5.0,6.0],[7.0,8.0,9.0]]我已经意识到这一点:
liste = input("Put in the Matrix: ")我要总结一下这些专栏:
col_sums = [ sum(x) for x in zip(*liste) ]现在它需要计算规范化列表,如下所示:
liste = [[1.0,2.0,3.0],
[4.0,5.0,6.0],
[7.0,8.0,9.0]]
list_norm = 1.0/col_sums[0] 2.0/col_sums[1] ...
4.0/col_sums[0] 5.0/col_sums[1] ...
7.0/col_sums[0] 8.0/col_sums[1] ...实现这一目标的正确途径是什么?
谢谢你的反馈和关注。
发布于 2020-02-18 16:47:08
到目前为止,你做其他事情的方式看起来都是正确的。您只需要对list_norm进行另一个列表理解
liste = [[1.0,2.0,3.0],
[4.0,5.0,6.0],
[7.0,8.0,9.0]]
col_sums = [ sum(x) for x in zip(*liste) ]
list_norm = [[e / col_sums[c] for c, e in enumerate(row)] for row in liste]
# [[0.083, 0.133, 0.166],
# [0.333, 0.333, 0.333],
# [0.583, 0.533, 0.5]]我们在这里使用enumerate()获取元素及其列表索引,并使用索引从col_sums获得适当的和。
正如@kaya3 3在评论中提到的,替代的、更干净的、解决方案:
list_norm = [[e / s for e, s in zip(row, col_sums)] for row in liste]其中,zip()从它的两个参数中生成对应的元素对。在功能上,这是相同的代码片段,并产生相同的东西。
没有任何特别干净的方法可以将整个过程统一起来,但我认为不需要这样做。
https://stackoverflow.com/questions/60285610
复制相似问题