Trouver produit scalaire dans r
Je suis en train d'essayer de trouver le produit scalaire de deux matrices dans R. Dans le q de la matrice, qui doit être transposée, j'ai trois différentes valeurs de q que j'ai généré de façon aléatoire, plus tôt, et dans la z de la matrice de trois généré de façon aléatoire z valeurs qui servent de coordonnées d'un point au hasard je. J'ai:
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
Cependant, lorsque j'essaie de calculer s[i], j'obtiens Error in t(q) * z : non-conformable arrays
. Je ne suis pas sûr pourquoi ce serait que je, ils semblent tous les deux ont la même longueur.
C'est ma première fois à l'aide de R, donc je ne suis pas vraiment sûr de ce qui se passe.
Merci!
- Vous devez montrer un exemple reproductible
q= matrix(c(q0,q1,q2), ncol=3) Error in matrix(c(q0, q1, q2), ncol = 3) : object 'q0' not found
- Produit scalaire est
%*%
. - Je l'ai fait il reproductible, désolé de ne pas le faire avant.
- Avez-vous essayé la suggestion de Pascal
- Je l'ai changé pour %*% mais pas obtiens le message d'erreur: le message d'Avertissement: Dans s[i] = t(q) %*% z : nombre d'éléments à remplacer n'est pas un multiple de remplacement de la longueur.
- S'appuyant sur l'exemple, il a travaillé.
crossprod(q, z)
- voulez-vous dire mon exemple dans la question changé d'utiliser le %*%? Avec que j'obtiens l'erreur que j'ai mentionné dans mon dernier commentaire de Pascal
- Je reçois la même erreur lorsque j'utilise crossprod
- Il est préférable de définir une graine pour le rendre reproductible. c'est à dire
set.seed(1)
avant larunif
. C'est ce que je reçoiscrossprod(q, z) [,1] [,2] [,3] [1,] 0.7622588 10.68985 14.67339 [2,] 0.8413184 11.79857 16.19527 [3,] 0.8964904 12.57230 17.25733
- Où avez-vous définir
s
? - êtes-vous en utilisant exactement ce que j'ai écrit juste avec crossprod(q,z?). Êtes-vous à l'aide de la R de la console? Si si, nous faisons les mêmes choses donc je ne sais pas pourquoi il ne fonctionne pas pour moi...
- Je devrais avoir inclus s= NULL , désolé
- Jeu de certaines graines.
set.seed(1); z1= runif(100, min=0, max= 20);....crossprod(q,z)
- Il a travaillé!! Merci. Mais maintenant, comment puis-je obtenir le produit scalaire de cela?
- oublié de vous marquer
- J'ai eu le même message d'erreur "rror en v %*% w : non conforme arguments". crossprod(v, w) a contribué à la. Merci.
- a,b sont tous les deux de la matrice: puis un %*% b
Vous devez vous connecter pour publier un commentaire.
Comme dit Pascal, produit scalaire dans R est %*%. Je suis en mesure d'utiliser avec succès sur votre échantillon de données: