【问题标题】:Discrete difference operator for a Matrix in R?R中矩阵的离散差分算子?
【发布时间】:2020-07-06 14:12:32
【问题描述】:

我有一个矩阵

A <- matrix(1:16, nrow = 4, ncol = 4, Byrow = FALSE)

我想要矩阵 A 的逐行差分。即取 A 的第一行和第二行之间的逐元素差分,A 的第二行和第三行之间的逐元素差分,等等。因为 A ∈ R4× 4,生成的矩阵应包含维度为 3 × 4 的逐行差异。

我不想使用 for 循环遍历 A 的行并获取连续行之间的差异,我想使用离散差分运算符来加快运算速度。我使用 sapply() 构造这个矩阵差分算子 B。然后使用 B × A 计算逐行差分。

假设矩阵 B ∈ R3×4

B <- matrix(c( -1,  1, 0,  0, 
                0, -1, 1,  0,
                0, 0, -1, 1), nrow = 3, ncol = 4, byrow = TRUE)

预期的输出是一个全为 1 的矩阵 C ∈ R3×4。

Result_C <- matrix(c(  1, 1, 1,  1, 
                       1, 1, 1,  1,
                       1, 1, 1, 1), nrow = 3, ncol = 4, byrow = TRUE)

我应该如何进行? R中矩阵的差分运算符是什么?

【问题讨论】:

  • 不清楚使用B 计算“A”差异。为什么我们不能只做diff(A)

标签: r matrix matrix-multiplication


【解决方案1】:

我们可以使用diff来计算行之间的差异

diff(A)
#     [,1] [,2] [,3] [,4]
#[1,]    1    1    1    1
#[2,]    1    1    1    1
#[3,]    1    1    1    1

【讨论】:

  • 是的,但是我们应该如何处理矩阵 B?
【解决方案2】:

您可以寻址到矩阵的完整列或行

A <- matrix(1:16, nrow = 4, ncol = 4)

A[2:(nrow(A)),]-A[1:(nrow(A)-1),]

是的,diff(A) 应该在这里做同样的事情

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-15
    • 1970-01-01
    • 2015-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多