在r中寻找点积

在r中寻找点积,r,matrix,transpose,dot-product,R,Matrix,Transpose,Dot Product,我试图在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)

我试图在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]时,我得到了t(q)*z:非一致数组中的
错误。我不知道为什么会这样,因为它们似乎都有相同的长度

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


谢谢

正如帕斯卡所说,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
样本答案:

library(geometry)
dot(A,B)

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

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

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

sum(a*b)

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

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
}

dot你必须展示一个可复制的例子
q=matrix(c(q0,q1,q2),ncol=3)矩阵中的错误(c(q0,q1,q2),ncol=3):找不到对象“q0”
dot乘积是
%*%
@akrun,我已经让它可复制了,很抱歉之前没有这么做。@JonathanO'Farrell你试过Pascal的吗suggestion@Khashaa我也犯了同样的错误“v%*%w中的错误:不一致的参数”。crossprod(v,w)有帮助。谢谢。