7

我试图在 R 中找到两个矩阵的点积。在必须转置的 q 矩阵中,我有三个不同的 q 值,它们是我之前随机生成的,在 z 矩阵中,三个随机生成的 z 值用作坐标一个随机点 i。我有:

    z0= NULL
    for (i in 1:100){
        z0[i]= 1
    }
    z1= runif(100, min=0, max= 20)
    z2= runif(100, min=0, max=20)
    q0= runif(1, 0, 1)
    q1= runif(1, 0, 1)
    q2= runif(1, 0, 1)
    i= runif(1, 1, 101)
    i= ceiling(i-1)
    q= matrix(c(q0,q1,q2), ncol=3)
    z= matrix(c(z0[i],z1[i],z2[i]), ncol=3)
    s[i]= t(q)*z

但是,当我尝试计算 s[i] 时,我得到Error in t(q) * z : non-conformable arrays. 我不确定为什么会这样,因为它们似乎都具有相同的长度。

这是我第一次使用 R,所以我不确定发生了什么。

谢谢!

4

4 回答 4

9

不使用矩阵或任何特殊库:

两个向量的点积可以通过将它们逐元素相乘*然后对结果求和来计算。

a <- c(1,2,3)
b <- c(4,5,6)

sum(a*b)
于 2020-11-11T00:43:48.157 回答
6

正如 Pascal 所说,R 中的点积是 %*%。我可以在您的示例数据上成功使用它:

> z0= NULL
> for (i in 1:100){
+     z0[i]= 1
+ }
> z1= runif(100, min=0, max= 20)
> z2= runif(100, min=0, max=20)
> q0= runif(1, 0, 1)
> q1= runif(1, 0, 1)
> q2= runif(1, 0, 1)
> i= runif(1, 1, 101)
> i= ceiling(i-1)
> q= matrix(c(q0,q1,q2), ncol=3)
> z= matrix(c(z0[i],z1[i],z2[i]), ncol=3)
> t(q)%*%z
          [,1]     [,2]     [,3]
[1,] 0.3597998 3.227388 2.960053
[2,] 0.3544622 3.179510 2.916141
[3,] 0.3550781 3.185035 2.921208
> z%*%t(q)
         [,1]
[1,] 4.340265
于 2015-09-04T15:10:15.720 回答
4

示例答案:

library(geometry)
dot(A,B)
于 2020-10-29T00:08:11.433 回答
1

由于似乎其他人已经解决了您的问题,我只想补充说,如果您想要一个特殊的点积函数,您可以自己编写一个:

dot <- function(x, y){   # x and y can be vectors or matrices
    result <- t(x)%*%y   # %*% is the matrix multiplication operator
    print(result)        # t(x) denotes the transpose of x
}

或者,正如@user3503711 在他的回答中所说,您可以只使用几何库中的 dot() 函数。

于 2021-04-25T17:30:34.707 回答