#include <stdio.h>
#include <cstdlib>
 
int main(int argc, char **argv) {
    try {
        int device = argc > 1 ? atoi(argv[1]) : 0;
 
        int days = 9, sites = 4;
        int n                = 10;                              
        float day_[]         = {0, 0, 1, 2, 5, 5, 6, 6, 7, 8};  
        float site_[]        = {2, 3, 0, 1, 1, 2, 0, 1, 2, 1};
        float measurement_[] = {9, 5, 6, 3, 3, 8, 2, 6, 5, 10};  
        array measurement(n, measurement_);
 
 
        gfor(
seq s, sites) { rainfall(s) = 
sum(measurement * (site == s)); }
 
 
        printf("total rainfall at each site:\n");
 
        array is_between   = 1 <= day && day <= 5;  
 
        float rain_between = 
sum<float>(measurement * is_between);
 
        printf("rain between days: %g\n", rain_between);
 
        printf("number of days with rain: %g\n",
 
        gfor(
seq d, days) per_day(d) = 
sum(measurement * (day == d));
 
 
        printf("total rainfall each day:\n");
 
        printf(
"number of days over five: %g\n", 
sum<float>(per_day > 5));
        fprintf(stderr, 
"%s\n", e.
what());
        throw;
    }
 
    return 0;
}
A multi dimensional data container.
An ArrayFire exception class.
virtual const char * what() const
Returns an error message for the exception in a string format.
seq is used to create sequences for indexing af::array
array diff1(const array &in, const int dim=0)
C++ Interface to calculate the first order difference in an array over a given dimension.
array constant(T val, const dim4 &dims, const dtype ty=(af_dtype) dtype_traits< T >::ctype)
C++ Interface to generate an array with elements set to a specified value.
void setDevice(const int device)
Sets the current device.
array sum(const array &in, const int dim=-1)
C++ Interface to sum array elements over a given dimension.