【问题标题】:Inconsistent vector operations in R?R中的向量运算不一致?
【发布时间】:2014-04-04 12:41:31
【问题描述】:

我在大学教授数学和编程(使用 R),我非常喜欢良好且一致的符号。请看一下R中的以下简单向量操作:

> v1 <- c(1,2,3)
> v2 <- c(4,5,6)
> v1 %*% v2
     [,1]
[1,]   32
> t(v1) %*% v2
     [,1]
[1,]   32
> v1 %*% t(v2)
     [,1] [,2] [,3]
[1,]    4    5    6
[2,]    8   10   12
[3,]   12   15   18
> t(v1) %*% t(v2)
Error in t(v1) %*% t(v2) : non-conformable arguments
> v1 + v2
[1] 5 7 9
> v1 + t(v2)
     [,1] [,2] [,3]
[1,]    5    7    9
> t(v1) + t(v2)
     [,1] [,2] [,3]
[1,]    5    7    9

我认为这里有一些不一致之处:要么我遗漏了某些东西,要么 R 似乎对你在转置或不转置向量时得到的结果非常武断。

这里的底层逻辑是什么(顺便说一下好像和matlab完全不一样)。

【问题讨论】:

  • 你为什么用Matlab标记这个?
  • 我同意 Matlab 的规则更加一致。 R 尝试做一些便于交互式分析的事情(将向量提升为行或列矩阵似乎合适,删除维度)。正如@GavinKelly 下面的回答所指出的那样,它的行为明确定义的,但这并不意味着它有时不会令人困惑。

标签: r vector matrix-multiplication


【解决方案1】:

?%*% 给出了逻辑:

将两个矩阵相乘,如果它们是一致的。如果一个论点 是一个向量,它将被提升为行或列矩阵 使两个论点一致。如果两者都是向量 将返回内积(作为矩阵)。

如果它们都是向量(第一个示例),那么您将得到内积。如果您在其中放置 t( ),向量将被转换为列矩阵,向量实际上是行矩阵,因此适用规范的一致规则。

同样,“+”的帮助页面表示它将参数转换为向量 - 并就结果的“形状”提供一些指导。

【讨论】:

    猜你喜欢
    • 2015-06-10
    • 2023-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-25
    • 1970-01-01
    • 2020-05-01
    • 2019-02-01
    相关资源
    最近更新 更多