【问题标题】:Arithmetic operation (Difference) between a vector and a Matrix in RR中向量和矩阵之间的算术运算(差)
【发布时间】:2019-02-01 09:15:02
【问题描述】:

当我试图计算 R 中列表和矩阵之间的差异时,我遇到了这个问题,它给了我奇怪的结果。

matrix <- matrix(1:10,1:10,nrow = 10,ncol=10)

list1 <- seq(1:10)

diff <- list1-matrix

下面是我想要实现的输出,但它不起作用。请让我知道我做错了什么。

【问题讨论】:

  • 您显示的是vector,而不是list。您可以通过多种方式做到这一点t(t(matrix)- list1) 或 matrix - list1[col(matrix)] 或 sweep(matrix, 2, list1, -)

标签: r matrix arithmetic-expressions


【解决方案1】:

您需要了解的是,在 R 中,矩阵以列优先顺序存储。这意味着矩阵是从上到下按列排列的数字序列。

因此,当您从矩阵中减去一个向量时,您可以将其想象为包含 4 个步骤的操作:

  1. 矩阵变成数字序列(向量)
  2. 您的“list1”被扩展(重复),使其长度与从矩阵构造的向量的长度相匹配。
  3. 每个元素中的元素相互减去
  4. 数字再次组合成矩阵形式。

在你的情况下:

1) 矩阵被转换成一个数字序列(按列)给你:

1, 1, 1 ,1 ... 1, 2, 2, 2, 2, ... 2, ... ... 10, 10, 10, 10, ... 10

2) 重复第二个向量,直到与第一个向量匹配:

1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 1 ,2 ,3 ,4 ,5 ,6 ,7 ,8, 9, 10, ... 1, 2, 3, ... 10

3) 现在它们的长度相同,因此它们被相互减去:

0, 1, 2, 3, 4, 5, 6, 7, 8, 9, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, ..., -9, -8, -7, ... 0

4) 结果再次转换为矩阵,为您提供您看到的矩阵。

为了获得您想要的结果,您必须考虑到这一点。一种方法是转置矩阵,进行减法,然后再次转置:

t(t(matrix) - list1)

这是因为在转置t 之后,行变成了列。

另一种方法是从您的 list1 向量中构造一个矩阵:

matrix2 <- matrix(list1, nrow=10, ncol=10, byrow=TRUE)

然后做减法:

diff <- matrix - matrix2

【讨论】:

    【解决方案2】:

    我们可以通过多种方式做到这一点

    1) 转置矩阵,减去vector,然后做transpose

    t(t(matrix)- list1)
    

    2) 复制vector 以使长度相同,然后做不同

    matrix - list1[col(matrix)]
    

    3) 使用sweep

    sweep(matrix, 2, list1, `-`)
    

    【讨论】:

      猜你喜欢
      • 2016-12-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-13
      • 1970-01-01
      • 2019-06-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多