Home > Blockchain >  Dimensions of matrix multiplication
Dimensions of matrix multiplication

Time:06-10

I am running a for loop with matrices. One line does not work properly:

K[1:2,i] * FF[i] %*% K1[i,1:2]

K is a 2 by n matrix, where i updates in the for loop. FF is an array(1:n) and K1 is the transpose of K. Taken out of the for loop, with the initial values:

n <- 100
K <- matrix(c(2,1), nrow=2, ncol=n)
K1 = t(K)
FF <- array(1:n)
FF[1] <- 10^7
K[1:2,1] * FF[1] %*% K1[1,1:2]

the result that R gives me is a 1 * 2 matrix. It should be a 2 * 2 matrix.

I have tried to exclude FF, but also then the matrix dimensions are not correct.

Thanks for helping!

CodePudding user response:

You have 2 problems. One is that R eagerly converts single-column matrices to vectors, so K[1:2,1] is interpreted as a vector, not a matrix. We can fix this with the drop = FALSE argument to [.

There's also an order-of-operations problem, %*% has higher precedence than *, so we need parentheses to make the * happen first:

(K[1:2, 1, drop = F] * FF[1]) %*% K1[1, 1:2]
#       [,1]  [,2]
# [1,] 4e 07 2e 07
# [2,] 2e 07 1e 07

Unrelated to your problem, but it seems strange to make FF an array, seems like a length-100 vector would be simpler.

  • Related