R - 获取稀疏马蒂的坐标或列表列表

时间:2016-07-15 15:29:46

标签: r matrix sparse-matrix

我在R中有一个sparseMatrix,在Matrix包中实现。我想对非零条目的列号执行一些操作。根据它的存储和打印方式,似乎应该有一个简单的功能来做到这一点,但我在文档中找不到一个。作为玩具示例,f(Matrix,Int)是我想要的功能,

M <- Matrix(c(1,0,0,1,0,1,0,0), nrow = 2)
# 1 0 0 1
# 0 1 0 0
f(M,1) = [1,4]
f(M,2) = [2]

因此,给定一个矩阵和行号,我们得到一个非零值索引列表。 注意:我不想迭代数据集的所有列(它们有数百万个),我想要一些方法来了解sparseMatrix如何存储在内存中或内置有效转换为List of列表或坐标列表表单。

2 个答案:

答案 0 :(得分:1)

您可以尝试:

with(summary(M), j[i == 1])
# [1] 1 4

with(summary(M), j[i == 2])
# [1] 2

将其包装为函数,假设M已经是sparseMatrix

f <- function(M, row) with(summary(M), j[i==row])
f(M, 1)
# [1] 1 4
f(M, 2)
# [1] 2

答案 1 :(得分:0)

你试过str(M)吗?它会显示矩阵实际上保存数据。 默认情况下,它以列主格式存储 - dgCMatrix。但您可以使用as()函数将其转换为三元组(坐标列表)和行主格式。

M_triplet = as(M, 'TsparseMatrix')
M_row = as(M, 'RsparseMatrix')

然后,您可以按元素执行所有操作,并将其转换回dgCMatrix(几乎所有Matrix方法都是原生的)。