计算scipy csr矩阵中的欧式距离

罗查纳·娜娜(Rochana Nana)

我需要计算存储在csr稀疏矩阵中的所有点与一些点列表之间的欧几里得距离。对我来说,将csr转换为密集的csr会比较容易,但是由于内存不足,我无法这样做,因此我需要将其保留为csr。

因此,例如,我有这个data_csr稀疏矩阵(同时以csr和dens形式查看):

data_csr
(0, 2)  4
(1, 0)  1
(1, 4)  2
(2, 0)  2
(2, 3)  1
(3, 5)  1
(4, 0)  4
(4, 2)  3
(4, 3)  2

data_csr.todense()
[[0, 0, 4, 0, 0, 0]
 [1, 0, 0, 0, 2, 0]
 [2, 0, 0, 1, 0, 0]
 [0, 0, 0, 0, 0, 1]
 [4, 0, 3, 2, 0, 0]]

以及该中心的要点列表:

center
array([[0, 1, 2, 2, 4, 1],
      [3, 4, 1, 2, 4, 0]])

使用该scipy.spatial程序包,data_csrcenter之间的欧几里德距离数组将类似于下面的数组因此,针对data_csr中的所有行,计算中心的每一行中总共6个点中的每个点结果数组(2,5)的第一行是center的第一行data_csr中的所有行之间的ED

scipy.spatial.distance.cdist(center, data_csr, 'euclidean')

array([[ 5.09901951,  3.87298335,  5.19615242,  5.        ,  5.91607978],
      [ 7.34846923,  5.38516481,  5.91607978,  6.8556546 ,  6.08276253]])


到目前为止,我已经了解到我可以使用以下方法获取非零值以及索引了:

data_csr.data
array([4, 1, 2, 2, 1, 1, 4, 3, 2])

data_csr.indices
array([2, 0, 4, 0, 3, 5, 0, 2, 3])

但是我仍然不知道如何计算这两个对象之间的ED。

hpaulj

因此,让我们创建矩阵(很遗憾,您没有提供我可以复制粘贴的输入)

In [114]: data=[4,1,2,2,1,1,4,3,2]   
In [115]: col=[0,1,1,2,2,3,4,4,4]
In [116]: row=[2,0,4,0,3,5,0,2,3]
In [117]: M=sparse.csr_matrix((data,(col,row)))

In [118]: M
Out[118]: 
<5x6 sparse matrix of type '<type 'numpy.int32'>'
    with 9 stored elements in Compressed Sparse Row format>

In [119]: M.A
Out[119]: 
array([[0, 0, 4, 0, 0, 0],
       [1, 0, 0, 0, 2, 0],
       [2, 0, 0, 1, 0, 0],
       [0, 0, 0, 0, 0, 1],
       [4, 0, 3, 2, 0, 0]])

In [121]: center=np.array([[0,1,2,2,4,1],[3,4,1,2,4,0]])

那么,您是如何计算距离的呢?M.A是(5,6),center是(2,6)。这两个数组在做什么并不明显。

至于访问“原始”稀疏值,该coo格式最容易理解。这是我用来创建矩阵的相同行,列,数据内容

In [131]: M.tocoo().data
Out[131]: array([4, 1, 2, 2, 1, 1, 4, 3, 2])

In [132]: M.tocoo().col
Out[132]: array([2, 0, 4, 0, 3, 5, 0, 2, 3])

In [133]: M.tocoo().row
Out[133]: array([0, 1, 1, 2, 2, 3, 4, 4, 4])

csr存储在同一个信息dataindicesindptr阵列。但是您必须做一些数学运算才能i,j得出最后2个值。csr乘法例程充分利用了这些数组。

通常,与csr矩阵相乘要比加法/减法好。

我等待进一步的澄清。


spatial.distance.cdist(center,M.A, 'euclidean')
Out[156]: 
array([[ 5.09901951,  3.87298335,  5.19615242,  5.        ,  5.91607978],
       [ 7.34846923,  5.38516481,  5.91607978,  6.8556546 ,  6.08276253]])

我们需要做的是研究此功能,并了解其输入。我们可能不得不超越其文档,然后看一下代码。

但是看这段代码,我看到了确保xB2d数组的步骤,列数与相同xA然后euclidian它呼吁

_distance_wrap.cdist_euclidean_wrap(_convert_to_double(XA),
                                    _convert_to_double(XB), dm)

看起来像是一些C代码的包装器。我无法想象有什么方法可以将其送入稀疏矩阵。

您可以遍历行;通话dist-M[[0],:].A相同,M.A[[0],:]但速度不同。遍历稀疏矩阵的行有点慢,这是因为它必须在每次迭代时构造一个新的稀疏矩阵。csr并且lil是行迭代最快的2。

这可能更快一些-直接迭代lil格式的属性

 def foo(a,b,n):
    # make a dense array from data,row
    res = np.zeros((1,n))
    res[0,b]=a
    return res

In [190]: Ml=M.tolil()

In [191]: Ml.data
Out[191]: array([[4], [1, 2], [2, 1], [1], [4, 3, 2]], dtype=object)

In [192]: Ml.rows
Out[192]: array([[2], [0, 4], [0, 3], [5], [0, 2, 3]], dtype=object)

In [193]: rowgen=(foo(a,b,6) for a,b in zip(Ml.data,Ml.rows))

In [194]: np.concatenate([spatial.distance.cdist(center,row, 'euclidean') for row in rowgen],axis=1)
Out[194]: 
array([[ 5.09901951,  3.87298335,  5.19615242,  5.        ,  5.91607978],
       [ 7.34846923,  5.38516481,  5.91607978,  6.8556546 ,  6.08276253]])

现在,我将跳过时间测试。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

计算大型矩阵中RGB向量之间的欧式距离

来自分类Dev

计算大型矩阵中RGB向量之间的欧式距离

来自分类Dev

计算大型矩阵中RGB向量之间的欧式距离

来自分类Dev

如何计算R中两个矩阵之间的欧式距离

来自分类Dev

计算c中的欧式距离的函数

来自分类Dev

Scipy中的稀疏矩阵计算

来自分类Dev

计算缺少值的scipy中的成对距离

来自分类Dev

替换 scipy 稀疏 csr 矩阵中的值

来自分类Dev

访问距离矩阵中的特定成对距离(scipy / numpy)

来自分类Dev

向量化欧式距离计算-NumPy

来自分类Dev

计算存储在数据框中的轮廓之间的欧式距离。使用一行作为参考

来自分类Dev

计算矩阵中的最短距离

来自分类Dev

哪种SciPy稀疏矩阵类别最适合计算距离矩阵?

来自分类Dev

用numpy / scipy计算矩阵中每个单元的邻域乘积

来自分类Dev

如何计算Scipy中多元高斯的概率?

来自分类Dev

与给定距离矩阵的 scipy 链接

来自分类Dev

如何使用x,y坐标自动计算networkx中邻居之间的欧式距离并找到最小生成树

来自分类Dev

Python中的欧式距离

来自分类Dev

计算后续成对坐标之间的累积欧式距离

来自分类Dev

计算具有多个列特征的数据框的欧式距离

来自分类Dev

python如何从scipy压缩距离矩阵中获得适当的距离值

来自分类Dev

SciPy稀疏矩阵(COO,CSR):清除行

来自分类Dev

SciPy稀疏矩阵(COO,CSR):清除行

来自分类Dev

Scipy CSR稀疏矩阵居然是COO?

来自分类Dev

制作距离矩阵或重复计算距离

来自分类Dev

错误计算 Scipy 中的 KL 散度

来自分类Dev

如何计算 scipy.sparse.csr.csr_matrix 列表的余弦相似度

来自分类Dev

R中的加权欧式距离

来自分类Dev

如何用R在两组点(坐标)之间的欧式距离计算房屋距离

Related 相关文章

  1. 1

    计算大型矩阵中RGB向量之间的欧式距离

  2. 2

    计算大型矩阵中RGB向量之间的欧式距离

  3. 3

    计算大型矩阵中RGB向量之间的欧式距离

  4. 4

    如何计算R中两个矩阵之间的欧式距离

  5. 5

    计算c中的欧式距离的函数

  6. 6

    Scipy中的稀疏矩阵计算

  7. 7

    计算缺少值的scipy中的成对距离

  8. 8

    替换 scipy 稀疏 csr 矩阵中的值

  9. 9

    访问距离矩阵中的特定成对距离(scipy / numpy)

  10. 10

    向量化欧式距离计算-NumPy

  11. 11

    计算存储在数据框中的轮廓之间的欧式距离。使用一行作为参考

  12. 12

    计算矩阵中的最短距离

  13. 13

    哪种SciPy稀疏矩阵类别最适合计算距离矩阵?

  14. 14

    用numpy / scipy计算矩阵中每个单元的邻域乘积

  15. 15

    如何计算Scipy中多元高斯的概率?

  16. 16

    与给定距离矩阵的 scipy 链接

  17. 17

    如何使用x,y坐标自动计算networkx中邻居之间的欧式距离并找到最小生成树

  18. 18

    Python中的欧式距离

  19. 19

    计算后续成对坐标之间的累积欧式距离

  20. 20

    计算具有多个列特征的数据框的欧式距离

  21. 21

    python如何从scipy压缩距离矩阵中获得适当的距离值

  22. 22

    SciPy稀疏矩阵(COO,CSR):清除行

  23. 23

    SciPy稀疏矩阵(COO,CSR):清除行

  24. 24

    Scipy CSR稀疏矩阵居然是COO?

  25. 25

    制作距离矩阵或重复计算距离

  26. 26

    错误计算 Scipy 中的 KL 散度

  27. 27

    如何计算 scipy.sparse.csr.csr_matrix 列表的余弦相似度

  28. 28

    R中的加权欧式距离

  29. 29

    如何用R在两组点(坐标)之间的欧式距离计算房屋距离

热门标签

归档