在稀疏lil_matrix(Scipy / Python)中查找最大值及其索引

时间:2014-07-19 14:11:23

标签: python matrix scipy

在Scipy稀疏lil_matrix对象中找到最大值及其对应的行和列索引的最佳方法是什么?我可以loop through the nonzero entries using itertools.izip,但有什么更好的吗?我觉得我在这里遗漏了一些明显的东西..

1 个答案:

答案 0 :(得分:6)

您可以转换为COO格式,然后使用datarowcol属性。

例如,假设LIL矩阵为x。这是获取最大值及其行和列的一种方法:

In [41]: x
Out[41]: 
<1000x1000 sparse matrix of type '<type 'numpy.float64'>'
    with 1999 stored elements in LInked List format>

In [42]: y = x.tocoo()

In [43]: k = y.data.argmax()

In [44]: maxval = y.data[k]

In [45]: maxrow = y.row[k]

In [46]: maxcol = y.col[k]

注意:上面的代码中有两个错误:

  • 如果所有非零值均为负值,则会找到最大的负值。但在这种情况下,正确答案应为0。
  • 如果没有非零值,则行k = y.data.argmax()将引发异常,因为y.data是一个空数组。

如果您的应用程序中不能发生这些情况,则可以忽略这些错误。