n=sc.shape(A)[0]
sim=sc.eye(n)
I=sc.eye(n)
P= normalize(A, norm='l1', axis=0)
Q=P*(1-np.exp(-A))
A是由代码创建的邻接矩阵:
df=pd.read_csv('training.csv')
G=nx.from_pandas_dataframe(df,'node1','node2','weight')
A = nx.adjacency_matrix(G)
我得到的错误:
File "ROC_final.py", line 36, in ASCOSplus
Q=P*(1-np.exp(-A))
File "C:\Python27\lib\site-packages\scipy\sparse\base.py", line 647, in __getattr__
raise AttributeError(attr + " not found")
AttributeError: exp not found
注意:我已经按照SO回答的建议尝试了解决方案A = A.astype(float)。
答案 0 :(得分:4)
A
是一个scipy稀疏矩阵。这样的矩阵没有实现exp
函数,因为这会将所有0转换为1,从而产生一个密集的矩阵。
要使用稀疏矩阵进行计算,您可以将1 - np.exp(-A)
写为-(np.exp(-A) - 1) = -np.expm1(-A)
。也就是说,替换
Q=P*(1-np.exp(-A))
与
Q = -P*np.expm1(-A)
expm1(x)
相当于exp(x) - 1
。该函数将零映射到零,因此它是一个安全的"稀疏矩阵的逐元素函数。
scipy稀疏矩阵有一个expm1()
方法(np.expm1
最终调用),所以你也可以将该行写为
Q = P*(-A).expm1()