【问题标题】:AttributeError: exp not foundAttributeError: exp not found
【发布时间】:2017-12-02 12:01:47
【问题描述】:
    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)。

【问题讨论】:

    标签: python numpy scipy networkx exponential


    【解决方案1】:

    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()
    

    【讨论】:

      猜你喜欢
      • 2015-10-16
      • 2022-08-04
      • 2019-01-17
      • 2021-12-27
      • 1970-01-01
      • 1970-01-01
      • 2022-12-27
      • 2019-05-12
      • 2019-07-07
      相关资源
      最近更新 更多