我正在尝试创建一个具有不同随机权重的邻接矩阵的总体,我正在使用下面的代码。然而,我的问题是,在运行这个时,所有的权重都是列表的最后一次迭代的权重?在生成过程中打印这些adjacencylists
时,它可以正常工作,但是getPopulation
函数的输出是相同参数集的5倍。你知道吗
感觉这将是一个简单的修复,但有些东西(我认为可能是非常基本的)丢失了。可能是需要深度拷贝的地方出了问题?你知道吗
已经尝试使用普通for循环、print语句等
import networkx as nx
import numpy as np
G = nx.DiGraph()
G.add_nodes_from(["Sadness", "Avoidance", "Guilt"])
G.add_edges_from([("Sadness", "Avoidance")], weight=1)
G.add_edges_from([("Avoidance", "Sadness")], weight=1)
G.add_edges_from([("Avoidance", "Guilt"), ("Guilt", "Sadness")], weight=1)
parameters = nx.to_numpy_matrix(G)
def getRandParamValue(adj):
for p in np.transpose(adj.nonzero()):
adj[p[0], p[1]] = adj[p[0], p[1]] * np.random.uniform()
print(adj)
return adj
def getPopulation(size, initParam):
return [getRandParamValue(initParam) for i in range(size)]
getPopulation(5, parameters)
在getRandParamValue函数中打印输出时,它可以正常工作:
[[0. 0.40218464 0. ]
[0.07330473 0. 0.7196376 ]
[0.53148413 0. 0. ]]
[[0. 0.34256617 0. ]
[0.01773899 0. 0.12460768]
[0.1401687 0. 0. ]]
[[0. 0.11086942 0. ]
[0.01449088 0. 0.04592752]
[0.07903259 0. 0. ]]
[[0. 0.01970867 0. ]
[0.00589168 0. 0.00860802]
[0.06942081 0. 0. ]]
[[0. 0.01045412 0. ]
[0.00084878 0. 0.00713334]
[0.0024654 0. 0. ]]
但是,getPopulation
的输出与前一个输出不同,这应该是意料之中的:
[matrix([[0. , 0.01045412, 0. ],
[0.00084878, 0. , 0.00713334],
[0.0024654 , 0. , 0. ]]),
matrix([[0. , 0.01045412, 0. ],
[0.00084878, 0. , 0.00713334],
[0.0024654 , 0. , 0. ]]),
matrix([[0. , 0.01045412, 0. ],
[0.00084878, 0. , 0.00713334],
[0.0024654 , 0. , 0. ]]),
matrix([[0. , 0.01045412, 0. ],
[0.00084878, 0. , 0.00713334],
[0.0024654 , 0. , 0. ]]),
matrix([[0. , 0.01045412, 0. ],
[0.00084878, 0. , 0.00713334],
[0.0024654 , 0. , 0. ]])]
参数矩阵如下:
[[0. 1. 0.]
[1. 0. 1.]
[1. 0. 0.]]
所以问题是:
我已将对象
my_outer_list
传递给函数。然后修改该对象,并返回该对象。所以现在newlist
和my_outer_list
不仅仅是相等的,它们是同一事物的两个不同名称。我对那个对象所做的事情改变了对象,不管你用哪个名字,你都能看到这些变化。你知道吗你就是这样。如果我让
myfunction
返回L.copy()
,它将返回L
的副本,而不是确切的L
。你知道吗所以你应该返回
adj.copy()
。你知道吗相关问题 更多 >
编程相关推荐