我有一个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
答案 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,你可以修改它算法在行中循环)。