Row_vector multiplication

Hi,

I have found the following piece of Stan code and I’m struggling to understand how the following multiplication can work.

So, here,

  1. beta_delta is a row_vector[p+q]
  2. temp_delta is also a row_vector[p+q] and
  3. sigma_delta is a matrix[N,N]
      sigma_delta[i, j] = beta_delta .* temp_delta * temp_delta';

How the multiplication of some row_vector can produce a single value to fit in a matrix?

I was looking here but I couldn’t find the way.

The whole loop is below and the code comes from the “Guidelines for the Bayesian calibration of building energy models”

  // diagonal elements of sigma_eta
  sigma_eta = diag_matrix(rep_vector((1 / lambda_eta), N));
 
  // off-diagonal elements of sigma_eta
  for (i in 1:(N-1)) {
    for (j in (i+1):N) {
      temp_eta = xt[i] - xt[j];
      sigma_eta[i, j] = beta_eta .* temp_eta * temp_eta';  // row_vector .* row_vector  * row_vector'
      sigma_eta[i, j] = exp(-sigma_eta[i, j]) / lambda_eta;
      sigma_eta[j, i] = sigma_eta[i, j];
    }
  }

Thanks

This is a multiplication of a row_vector with a vector (the second argument has a ' sign which is a transpose operation). So this is essentially a dot product that produces a single value.

3 Likes