【问题标题】:multiply two vectors - I want a scalar but I get a vector?将两个向量相乘 - 我想要一个标量,但我得到一个向量?
【发布时间】:2012-12-08 16:29:21
【问题描述】:

这是我的代码:

a <-c(1,2,3)
b <-t(a)
print(a*b)

我希望结果为 14,因为列向量乘以具有合适尺寸的行向量应该是 skalar。

但是,我得到:

打印 (a*t(a))

 [,1] [,2] [,3]

[1,]    1    4    9

因此是部分总和而不是全部总和。我该如何解决这个问题?

【问题讨论】:

  • 列向量乘以具有合适尺寸的行向量得到一个 (n x n) 矩阵:matrix(a) %*% t(a)
  • 如果您不想要 crossprod 返回的内容,那么您需要详细说明您的期望。请注意,crossprod 可用于构造其他域,称为标量积或“点积”。 crossprod(1:3) 返回您显然想要的总和。

标签: r vector


【解决方案1】:

两个问题,乘法顺序错误,乘法函数错误。

> print(t(a)%*%a)
     [,1]
[1,]   14

等价:

> a=matrix(c(1,2,3),ncol=3)
> print (a %*% t(a))
     [,1]
[1,]   14

这里a是一个1行3列的矩阵。

?"%*%"?"*"

【讨论】:

  • 我们还要提一下,如果您正在会话中,则不需要使用print,这可能是这种情况。
  • 以及crossprodtcrossprod 函数。
  • ahm - 这不是我要找的交叉产品。
  • 有没有人知道 R 教程,它不花在“如何制作矢量”的章节上,但对实际编程有更多的影响?例如,如果我有一个矩阵,如何对矩阵的多个向量求和等等。
【解决方案2】:

如果您本质上想要的是产品的总和,那么您只需要sum(a*a)

【讨论】:

    【解决方案3】:

    你可以这样做,

    > a <-c(1,2,3)
    > b <-t(a)
    
    > b %*% a
    

    这里,%*% 充当矩阵乘积。

    【讨论】:

    • 不需要转置t(a)a %*% a 也可以。请注意,在这种情况下,%*% 运算符返回一个 1x1 矩阵,而不是数字。
    【解决方案4】:

    只需这样做

    a <-c(1,2,3)
    > b<-t(a)
    > b
    
    > t(b)
    

    然后

    总和(a*t(b)) [1] 14

    【讨论】:

    • 为什么这个回复被否决了?它似乎给出了正确的答案
    猜你喜欢
    • 2015-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多