【问题标题】:R Create Matrix From an Operation on a "Row" Vector and a "Column" VectorR从对“行”向量和“列”向量的操作创建矩阵
【发布时间】:2014-05-24 07:27:50
【问题描述】:

首先在R中创建一个“行”向量和一个“列”向量:

> row.vector <- seq(from = 1, length = 4, by = 1)
> col.vector <- {t(seq(from = 1, length = 3, by = 2))}

据此,我想创建一个矩阵,例如,将行向量中的每个值与列向量中的每个值相乘,从而仅从这两个向量创建:

     [,1] [,2] [,3]
[1,]    1    3    5
[2,]    2    6   10
[3,]    3    9   15
[4,]    4   12   20

这可以通过某种方式使用apply() 来完成吗? sweep()? ...for 循环?

感谢您的帮助!

【问题讨论】:

    标签: r vector transpose


    【解决方案1】:

    简单的矩阵乘法就可以了

    row.vector %*% col.vector
    #      [,1] [,2] [,3]
    # [1,]    1    3    5
    # [2,]    2    6   10
    # [3,]    3    9   15
    # [4,]    4   12   20
    

    【讨论】:

    • 谢谢弗利克先生。我简化了我的问题,试图让它对其他人更普遍。应该更清楚,实际上我要执行的操作比乘法更复杂(如果row.vector -&gt; rcol.vector -&gt; c,那么我将计算(exp(r - c)/(1 + exp(r - c))),但是您的回答非常有帮助和概括性足以帮助其他人谁读过这个。
    • @wes 那么我的推荐看起来很像@thelatemail 的自定义函数outer(r, as.vector(c), FUN=function(r,c) (exp(r-c)/(1+exp(r-c))))
    • 是的,这很优雅。再次感谢您!
    【解决方案2】:

    你最好使用两个实际的向量,而不是一个向量和一个矩阵:

    outer(row.vector,as.vector(col.vector))
    
    #     [,1] [,2] [,3]
    #[1,]    1    3    5
    #[2,]    2    6   10
    #[3,]    3    9   15
    #[4,]    4   12   20
    

    【讨论】:

    • 啊,很好,thelatemail。我不知道outer。很高兴知道使用 col."vector" 作为实际向量。谢谢!
    【解决方案3】:

    这是通过apply 到达那里的一种方式。你不使用matrix有什么原因吗?

    > apply(col.vector, 2, function(x) row.vector * x)
    ##      [,1] [,2] [,3]
    ## [1,]    1    3    5
    ## [2,]    2    6   10
    ## [3,]    3    9   15
    ## [4,]    4   12   20
    

    【讨论】:

    • 我是 R 的新手,所以我只是不确定如何使用 matrix 来执行操作(而不仅仅是创建矩阵)。使用您的答案来解决我的真正问题(我之前没有提出以使其对其他人有用,我使用您的答案来产生answer = apply(col.vector, 2, function(x) {exp(row.vector - x)/(1 + exp(row.vector - x))}) 这就像一个魅力!我应该更新我的问题吗?来反映我的问题的两个层次(简单的乘法和逻辑的)的答案?谢谢,Richard Scriven!
    猜你喜欢
    • 1970-01-01
    • 2015-08-31
    • 2012-09-04
    • 2018-02-20
    • 1970-01-01
    • 2014-07-27
    • 1970-01-01
    • 2016-05-22
    • 1970-01-01
    相关资源
    最近更新 更多