用 1 填充 Scipy 稀疏矩阵
Fill Scipy Sparse Matrix with Ones
我有一个 scipy 稀疏矩阵,我想将其值替换为:
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
最简单的方法是直接操作稀疏矩阵表示。这样做的方式将取决于您选择的代表;对于 COO 格式,它将是
data.data[:] = 1
请注意,COO 格式有一个奇怪的功能,它允许重复条目。如果 COO 矩阵在 (1, 1)
位置有两个条目,上面的代码会将这两个条目设置为 1
,如果您将矩阵转换为另一种格式,则会导致单个条目 2
.如果您想要 1
的单个条目,则可以先规范化重复项
data.sum_duplicates()
data.data[:] = 1
如果您只需要将它们放在矩阵的某些列中,您可以使用 scipy.sparse getnnz 函数执行它。
在沿 axis=1 的所选列中使用该函数,您可以获得一个新列,其中只有一个在相应的位置。
data[:,col] = csc_matrix(data[:,col].getnnz(axis=1)).T
当然,把csc_matrix换成你用的稀疏类型,但是考虑到切片cols在csc_matrix中效率更高,所以考虑把你的矩阵改成csc_matrix 在执行此操作之前(如果您有 csr_matrix 您可以修改此算法以在行中循环)。
我有一个 scipy 稀疏矩阵,我想将其值替换为:
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
最简单的方法是直接操作稀疏矩阵表示。这样做的方式将取决于您选择的代表;对于 COO 格式,它将是
data.data[:] = 1
请注意,COO 格式有一个奇怪的功能,它允许重复条目。如果 COO 矩阵在 (1, 1)
位置有两个条目,上面的代码会将这两个条目设置为 1
,如果您将矩阵转换为另一种格式,则会导致单个条目 2
.如果您想要 1
的单个条目,则可以先规范化重复项
data.sum_duplicates()
data.data[:] = 1
如果您只需要将它们放在矩阵的某些列中,您可以使用 scipy.sparse getnnz 函数执行它。 在沿 axis=1 的所选列中使用该函数,您可以获得一个新列,其中只有一个在相应的位置。
data[:,col] = csc_matrix(data[:,col].getnnz(axis=1)).T
当然,把csc_matrix换成你用的稀疏类型,但是考虑到切片cols在csc_matrix中效率更高,所以考虑把你的矩阵改成csc_matrix 在执行此操作之前(如果您有 csr_matrix 您可以修改此算法以在行中循环)。