我有一个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()))
,即使程序再运行一段时间,也没有进一步的输出。
如何纠正这个问题?
其他细节:
答案 0 :(得分:2)
看起来你有两个问题:
您的矩阵很大且稀疏,因此请尝试使用稀疏表示:
import scipy.sparse
# assuming your big boolean matrix is called A
sA = scipy.sparse.csr_matrix(A)
任何具有全零(在两行中)的行都将生成NaN
个值。这就是触发警告的原因。
你的代码永远不会退出的原因是矩阵太大了。不幸的是,Scipy的距离函数不支持稀疏矩阵,因此您必须自己编写Jaccard距离。 (见scipy's dense implementation here。)