R - 获取稀疏矩阵的坐标或列表列表表示
R - Get Coordinate or List of Lists representation of a sparse martix
我在 R 中有一个在 Matrix 包中实现的 sparseMatrix。我想对非零条目的列号执行一些操作。根据它的存储和打印方式,似乎应该有一个简单的函数来执行此操作,但我在文档中找不到。作为玩具示例,其中 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 如何存储在内存中或内置的高效转换为列表列表或坐标列表形式。
你可以试试:
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
你试过了吗str(M)
?它会显示矩阵实际保存数据。
默认情况下,它以列优先格式存储 - dgCMatrix
。但是您可以使用 as()
函数将其转换为三元组(坐标列表)和行优先格式。
M_triplet = as(M, 'TsparseMatrix')
M_row = as(M, 'RsparseMatrix')
然后您可以按元素执行所有操作并将其转换回 dgCMatrix
(几乎所有 Matrix
方法都是原生的)。
我在 R 中有一个在 Matrix 包中实现的 sparseMatrix。我想对非零条目的列号执行一些操作。根据它的存储和打印方式,似乎应该有一个简单的函数来执行此操作,但我在文档中找不到。作为玩具示例,其中 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 如何存储在内存中或内置的高效转换为列表列表或坐标列表形式。
你可以试试:
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
你试过了吗str(M)
?它会显示矩阵实际保存数据。
默认情况下,它以列优先格式存储 - dgCMatrix
。但是您可以使用 as()
函数将其转换为三元组(坐标列表)和行优先格式。
M_triplet = as(M, 'TsparseMatrix')
M_row = as(M, 'RsparseMatrix')
然后您可以按元素执行所有操作并将其转换回 dgCMatrix
(几乎所有 Matrix
方法都是原生的)。