我试图在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,所以我不确定发生了什么。
谢谢!
答案 0 :(得分:1)
正如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
答案 1 :(得分:1)
示例答案:
handleChange = (e) => {
const { name, value } = e.target;
this.setState((prevState) => ({
form: {
...prevState.form,
[name]: value
},
message: "event value: " + value
}));
};
答案 2 :(得分:0)
不使用矩阵或任何特殊库:
可以通过将两个向量的元素乘以*
并求和来计算两个向量的点积。
a <- c(1,2,3)
b <- c(4,5,6)
sum(a*b)
答案 3 :(得分:0)
既然其他人似乎已经解决了你的问题,我就补充一下,如果你想要一个特殊的点积函数,你可以自己写一个:
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() 函数。