【发布时间】:2020-04-20 01:52:29
【问题描述】:
我查看了Matrix 包和他们的slides。我试图理解 dgCMatrix 类中参数背后的直觉和含义。我明白了
-
@i给出矩阵中非零条目的从零开始的行索引。 -
@j给出矩阵中非零条目的从零开始的列索引。 -
@x在(i,j)位置给出非零元素。
但是我不明白指针@p 的含义。 documentation 说
指针的数字(整数值)向量,每列(或行)一个,指向列(或行)中元素的初始(从零开始)索引。
这不是很丰富。在“详细信息”部分,在同一页面上,他们解释了更多
如果缺少
i或j,则p必须是第一个元素为零的非递减整数向量。它提供行或列索引的压缩或“指针”表示,以缺失者为准。p的扩展形式rep(seq_along(dp),dp)其中dp <- diff(p)用作(从1 开始的)行或列索引。
这对我来说绝对是不直观的。有人可以简单解释一下p 代表什么吗?我创建了一个最小的工作示例,但可以随意创建一个新示例。
最小的工作示例
# Define non-zero values and their row/col indeces
i_indeces <- c(1, 3, 4, 6, 8, 9)
j_indeces <- c(2, 9, 6, 3, 9, 10)
values <- c(60, 20, 10, 40, 30, 50)
# Create the sparse matrix
A <- sparseMatrix(
i=i_indeces,
j=j_indeces,
x=values,
dims=c(10, 20)
)
在哪里
> str(A)
Formal class 'dgCMatrix' [package "Matrix"] with 6 slots
..@ i : int [1:6] 0 5 3 2 7 8
..@ p : int [1:21] 0 0 1 2 2 2 3 3 3 5 ...
..@ Dim : int [1:2] 10 20
..@ Dimnames:List of 2
.. ..$ : NULL
.. ..$ : NULL
..@ x : num [1:6] 60 40 10 20 30 50
..@ factors : list()
和
> A
10 x 20 sparse Matrix of class "dgCMatrix"
[1,] . 60 . . . . . . . . . . . . . . . . . .
[2,] . . . . . . . . . . . . . . . . . . . .
[3,] . . . . . . . . 20 . . . . . . . . . . .
[4,] . . . . . 10 . . . . . . . . . . . . . .
[5,] . . . . . . . . . . . . . . . . . . . .
[6,] . . 40 . . . . . . . . . . . . . . . . .
[7,] . . . . . . . . . . . . . . . . . . . .
[8,] . . . . . . . . 30 . . . . . . . . . . .
[9,] . . . . . . . . . 50 . . . . . . . . . .
[10,] . . . . . . . . . . . . . . . . . . . .
注意
我知道rep(seq_along(diff(A@p)), diff(A@p)) 是j_indeces 的重新排列形式,但我仍然不明白它的含义。
【问题讨论】:
标签: r pointers matrix sparse-matrix