【问题标题】:Make matrix by subtracting each element of vector from other element of it通过从向量的其他元素中减去向量的每个元素来制作矩阵
【发布时间】:2022-01-06 22:37:57
【问题描述】:

考虑向量a <- c(17.4, 17.2, 17.0, 16.9, 17.0, 17.4)

如何构建以下矩阵:

 A <-    17.4-17.4   17.2-17.4  17.0-17.4  16.9-17.4  17.0-17.4   17.4-17.4
         17.4-17.2   17.2-17.2  17.4-17.2  16.9-17.2  17.0-17.2   17.4-17.2
         17.4-17.0   17.2-17.0  17.0-17.0  16.9-17.0  17.0-17.0   17.4-17.0
         17.4-16.9   17.2-16.9  17.0-16.9  16.9-16.9  17.0-16.9   17.4-16.9
         17.4-17.0   17.2-17.0  17.0-17.0  16.9-17.0  17.0-17.0   17.4-17.0
         17.4-17.4   17.2-17.4  17.0-17.4  16.9-17.4  17.0-17.4   17.4-17.4

我想从第一个元素中减去所有向量元素并将结果存储在矩阵 A 的第一行中,然后从第二个元素中减去所有向量元素并将结果存储在矩阵 A 的第二行中,依此类推直到到达向量an的最后一个元素。

最终结果应该是:

A <- 0.0   -0.2   -0.4   -0.5   -0.4   0.0
     0.2    0.0   -0.2   -0.3   -0.2   0.2
     0.4    0.2    0.0   -0.1    0.0   0.4
     0.5    0.3    0.1    0.0    0.1   0.5
     0.4    0.2    0.0   -0.1    0.0   0.4
     0.0   -0.2   -0.4   -0.5   -0.4   0.0

【问题讨论】:

    标签: r dataframe matrix vector


    【解决方案1】:

    使用外部

    a <- c(17.4, 17.2, 17.0, 16.9, 17.0, 17.4)
    t(outer(a,a,`-`))
    
         [,1] [,2] [,3] [,4] [,5] [,6]
    [1,]  0.0 -0.2 -0.4 -0.5 -0.4  0.0
    [2,]  0.2  0.0 -0.2 -0.3 -0.2  0.2
    [3,]  0.4  0.2  0.0 -0.1  0.0  0.4
    [4,]  0.5  0.3  0.1  0.0  0.1  0.5
    [5,]  0.4  0.2  0.0 -0.1  0.0  0.4
    [6,]  0.0 -0.2 -0.4 -0.5 -0.4  0.0
    

    【讨论】:

    • 还有outer(a, a, FUN=\(x,y) y-x) 的变化。
    【解决方案2】:

    这里有几个选项,

    sapply(a, function(i) i-a)
    
    matrix(Reduce(`-`, expand.grid(a,a)), ncol = length(a))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-01-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多