AttributeError: exp not found

AttributeError: exp not found

    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 answer 的建议尝试了解决方案 A= A.astype(float)。

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。该函数将零映射到零,因此它是一个 "safe" 稀疏矩阵的逐元素函数。

scipy 稀疏矩阵有一个 expm1() 方法(np.expm1 最终调用),因此您也可以将该行写为

Q = P*(-A).expm1()