// uses y value for the last row of mat void sum_productmat_calc(float * y_data, float * x_data, int x_vector_size, int size, Eigen::MatrixXf & sum_product, int stride = 0, int offset = 0){ stride = stride ? stride : x_vector_size; sum_product.setIdentity(); float val1 = 0, val2 = 0; for(int i = 0; i < size; i++){ for(int r = 0; r < x_vector_size; r++){ for(int c = r+1; c < x_vector_size; c++){ val1 = (x_data[i*stride + r + offset]); val2 = (x_data[i*stride + c + offset]); if(val1 != val1 || val1 != val1){ continue; } sum_product(r, c) += val1*val2; sum_product(c, r) = sum_product(r, c); } sum_product(r, x_vector_size) += y_data[i] * x_data[i*stride + r + offset]; sum_product(x_vector_size, r) = sum_product(r, x_vector_size); } } }