예제 #1
0
// 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);
        }
    }
}