Scipy.spatial.distance.pdist给出RuntimeWarning:double_scalars中遇到的无效值

时间:2014-07-06 10:11:32

标签: python python-2.7 matrix runtime-error

我有一个16000 X 600的布尔矩阵。我想使用Jaccard Distance作为度量来创建距离矩阵。最终矩阵的尺寸为16000 X 16000.为此,我使用了scipy.spatial.distance.pdist

当我在一段时间后运行我的程序时,程序会抛出此警告,但不会退出

/usr/lib/python2.7/dist-packages/scipy/spatial/distance.py:386: RuntimeWarning: invalid value encountered in double_scalars
return (np.double(np.bitwise_and((u != v), np.bitwise_or(u != 0, v != 0)).sum()) / np.double(np.bitwise_or(u != 0, v != 0).sum()))

,即使程序再运行一段时间,也没有进一步的输出。

如何纠正这个问题?

其他细节:

  • 基质具有高稀疏度(~99%)。
  • 115行仅包含0'

1 个答案:

答案 0 :(得分:2)

看起来你有两个问题:

  1. 您的矩阵很大且稀疏,因此请尝试使用稀疏表示:

    import scipy.sparse
    # assuming your big boolean matrix is called A
    sA = scipy.sparse.csr_matrix(A)
    
  2. 任何具有全零(在两行中)的行都将生成NaN个值。这就是触发警告的原因。

  3. 你的代码永远不会退出的原因是矩阵太大了。不幸的是,Scipy的距离函数不支持稀疏矩阵,因此您必须自己编写Jaccard距离。 (见scipy's dense implementation here。)