Sha256: 0769260b81e849210991e21526b13e124e1e1921e6851a97413d412a4e166c21

Contents?: true

Size: 1.25 KB

Versions: 2

Compression:

Stored size: 1.25 KB

Contents

#ifndef ARRAY_2D_H
#define ARRAY_2D_H
#include <algorithm>
#include "ruby.h"

#ifdef HAVE_XMMINTRIN_H
#include <xmmintrin.h>
#define MM_GET_INDEX(packed, index) *(((double*)&packed) + index);
#endif

namespace array_2d
{

struct Stats {
  double min;
  double max;
  double mean;
  double median;
  double q1;
  double q3;
  double standard_deviation;

  Stats()
  {
    min = 0.0, max = 0.0, mean = 0.0, median = 0.0, q1 = 0.0, q3 = 0.0, standard_deviation = 0.0;
  };
};

class DFloat
{
  inline double* base_ptr(int col) { return entries + (col * rows); }
  inline void sort(double* col);
  inline double percentile(double* col, double pct);
  inline double sum(double* col);
  inline double standard_deviation(double* col, double mean);

#ifdef HAVE_XMMINTRIN_H
  inline double safe_entry(int col, int row);
  inline void sort_columns(int start_col, int pack_size);
  inline __m128d percentile_packed(int start_col, float pct);
  inline __m128d pack(int start_col, int row);
#endif

public:
  int cols;
  int rows;
  bool data_initialized;
  double* entries;
  Stats* stats;

  DFloat(VALUE ruby_arr, bool initialize_data);
  ~DFloat();

  Stats* descriptive_statistics();

#ifdef HAVE_XMMINTRIN_H
  Stats* descriptive_statistics_packed();
#endif
};
} // namespace array_2d
#endif

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
fast_statistics-0.2.1 ext/fast_statistics/array_2d.h
fast_statistics-0.2.0 ext/fast_statistics/array_2d.h