Example #1
0
    /// \brief Get the latest Monte Carlo integration record of a given
    /// variable
    ///
    /// \details
    /// For a `dim` dimension Monitor, `id` shall be 0 to `dim` - 1
    double record(std::size_t id) const
    {
        std::size_t iter = iter_size() ? iter_size() - 1 : iter_size();
        VSMC_RUNTIME_ASSERT_CORE_MONITOR_ID(record);
        VSMC_RUNTIME_ASSERT_CORE_MONITOR_ITER(record);

        return record_[iter * dim_ + id];
    }
Example #2
0
 void push_back (std::size_t iter, double grid, double integrand)
 {
     index_.push_back(iter);
     grid_.push_back(grid);
     integrand_.push_back(integrand);
     if (iter_size() > 1) {
         std::size_t i = iter_size() - 1;
         log_zconst_ += 0.5 * (grid_[i] - grid_[i - 1]) *
             (integrand_[i] + integrand_[i - 1]);
     }
 }
Example #3
0
 void read_record(std::size_t id, OutputIter first) const
 {
     const std::size_t N = iter_size();
     const double *riter = record_.data() + id;
     for (std::size_t i = 0; i != N; ++i, ++first, riter += dim_)
         *first = *riter;
 }
Example #4
0
/** kmeans_reduce()
 *	Updates the sum calculation for the various points
 */
void kmeans_reduce(void *key_in, iterator_t *itr)
{
    assert (key_in);
    assert (itr);
    
    int i;
    int *sum;
    int *mean;
    void *val;
    int vals_len = iter_size (itr);
    
    sum = (int *)calloc(dim, sizeof(int));
    mean = (int *)malloc(dim * sizeof(int));
    
    i = 0;
    while (iter_next (itr, &val))
    {
        add_to_sum (sum, val);
        ++i;
    }
    assert (i == vals_len);
    
    for (i = 0; i < dim; i++)
    {
        mean[i] = sum[i] / vals_len;
    }
    
    free(sum);
    emit(key_in, (void *)mean);
}
Example #5
0
    void read_record_matrix(OutputIter first) const
    {
        const std::size_t N = iter_size();
        if (Layout == ColMajor) {
            for (std::size_t d = 0; d != dim_; ++d) {
                const double *riter = record_.data() + d;
                for (std::size_t i = 0; i != N; ++i, ++first, riter += dim_)
                    *first = *riter;
            }
        }

        if (Layout == RowMajor)
            std::copy(record_.begin(), record_.end(), first);
    }