我试图在初始化为零之后将值分配给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]]。
任何人都可以向我解释这种奇怪的行为和解决方法吗?
答案 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
也应解决您的错误