python

时间:2016-11-05 09:50:08

标签: python-2.7 list multidimensional-array

我试图在初始化为零之后将值分配给python中的多维列表。 以下是edge_strength和initialProb是multiD列表的代码。

    edge_strength = [[1,2,3],[3,4,5],[6,7,8]]
    initialProb = [[0]*3]*3
    initialColumn =1
    denominator = 10
    for r in range(0,3):
        initialProb[r][initialColumn] = float(edge_strength[r][initialColumn])/denominator
    print initialProb

但是当我完成并打印initialProb列表时,我得到了答案 - [[0,0.7,0],[0,0.7,0],[0,0.7,0]] 相反它应该是 - [[0,0.2,0],[0,0.4,0],[0,0.7,0]]。

任何人都可以向我解释这种奇怪的行为和解决方法吗?

1 个答案:

答案 0 :(得分:0)

我不明白为什么你的解决方案也不起作用。虽然initialProb [r] [initialColumn]是一个标量,但似乎广播了edge_strength [r] [initialColumn]。如果你写了

,我会期待类似的东西
Glide.with(context).load(pictureUrl).into(imageView);

但是这样没有意义。

这是使用numpy的解决方法。 numpy-arrays的优势在于可以同时处理多个列。我希望至少有所帮助。

initialProb[1] = float(edge_strength[r][initialColumn])/denominator

编辑:我明白了发生了什么。请参阅Python list multiplication: [[...]]*3 makes 3 lists which mirror each other when modified初始化initialProb时,您不会获得三个不同的行,而是三个对同一列表的引用。如果修改列表,则会更改所有三个列表。

根据帖子

import numpy as np
initialProb = np.zeros((3,3))
edge_strength = np.array([[1,2,3],[3,4,5],[6,7,8]])
initialProb[:,initialColumn] = edge_strength[:,initialColumn].astype(np.float)/denominator

也应解决您的错误