使用

时间:2016-06-22 18:06:35

标签: python-2.7 scipy sparse-matrix

我有一个scipy稀疏矩阵,我想用1替换值:

from scipy import sparse
import numpy as np

data = np.array([[1, 2, 3, 0, 5], [6, 0, 0, 9, 10], [0, 0, 0, 0, 15]])

print sparse.coo_matrix(data)

我看到numpy有一个ones_like()函数,但这并没有解决我的问题。

输出应如下所示:

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

2 个答案:

答案 0 :(得分:4)

最简单的方法是直接操作稀疏矩阵表示。这样做的方式取决于你选择的代表性;对于COO格式,它是

public class test
{
  public static void main(String[] args)
  {
     String s0=args[0];
     String s1=args[1];
     System.out.println(s0+" "+s1);

  }
}

请注意,COO格式有一个奇怪的功能,它允许重复输入。如果COO矩阵在位置data.data[:] = 1 有两个条目,则上述代码会将这两个条目设置为(1, 1),如果将矩阵转换为其他格式,则会导致单个条目1 。如果您想要一个2的条目,则可以先重复标准化

1

答案 1 :(得分:0)

如果您只需要在矩阵的某些列中放置一些,可以使用scipy.sparse getnnz函数执行它。 沿着轴= 1在选定列中使用该函数,您可以获得一个新列,其中只有相应位置的列。

data[:,col] = csc_matrix(data[:,col].getnnz(axis=1)).T

当然,用你正在使用的稀疏类型替换csc_matrix,但是考虑到切片cols在csc_matrix中效率更高,所以考虑在执行此操作之前将矩阵转换为csc_matrix(如果你有csr_matrix,你可以修改它算法在行中循环)。