Умножение матриц (строка за строкой) - PullRequest
0 голосов
/ 20 апреля 2019

У меня есть матрица размерности 1000x100. Я хочу сделать внутреннее произведение (каждого ряда с itselg) построчно, так что теоретически я мог бы получить вектор 1000x1. Например:

A<-matrix(c(1,2,3,4),nrow=2,ncol=2,byrow=2)
     [,1] [,2]
[1,]    1    2
[2,]    3    4

Я хочу получить вектор, который выглядит так:

              [,1]
[1,]    c(1,2) %*% t(c(1,2))
[2,]    c(3,4) %*% t(c(3,4))  

Я попытался сделать цикл, но произошла ошибка:

U<-matrix(nrow=1000,ncol=1)
U

k=0
for(i in 1:nrow(U_hat)){
  for(j in 1:nrow(U_hat)){
    k=k+1
    U[k,1]=U_hat[i,]%*%t(U_hat[j,])
  }
}

где U_hat - матрица измерения 1000x100.

Буду признателен за помощь, чтобы узнать, как сделать это умножение. Спасибо.

1 Ответ

3 голосов
/ 20 апреля 2019

Умножьте А на себя и возьмите суммы строк:

rowSums(A*A)
## [1]  5 25

Это также будет работать:

apply(A, 1, crossprod)
## [1]  5 25

Это бы тоже сработало:

diag(tcrossprod(A))
## [1]  5 25
...