18 #ifndef PIC_UTIL_ARRAY_HPP 19 #define PIC_UTIL_ARRAY_HPP 74 this->data =
new T[
nData];
75 memcpy(this->data,
data,
sizeof(T) *
nData);
122 memcpy(this->data,
data,
sizeof(T) *
nData);
142 for(
int i = 0; i < n; i++) {
156 static T *
genRange(T minVal, T step, T maxVal, T *ret,
int &n)
158 n = int((maxVal - minVal) / step) + 1;
165 for(
int i = 1; i < n; i++) {
166 ret[i] = ret[i - 1] + step;
180 static T *
linspace(T minVal, T maxVal,
int n, T *ret)
182 T step = (maxVal - minVal) / (n - 1);
185 return genRange(minVal, step, maxVal, ret, tmp);
197 T tmp = data0[0] - data1[0];
198 T distSq = tmp * tmp;
200 for(
int k = 1; k < n; k++) {
201 tmp = data0[k] - data1[k];
231 for(
int k = 1; k < n; k++) {
266 for(
int k = 0; k < n; k++) {
281 static T
dot(T *data0, T *data1,
int n)
283 T out = data0[0] * data1[0];
285 for(
int k = 1; k < n; k++) {
286 out += data0[k] * data1[k];
301 if(
data == NULL || size < 1) {
305 for(
int i = 0; i < size; i++) {
319 if(
data == NULL || size < 1 || ret == NULL) {
323 for(
int i = 0; i < size; i++) {
336 if(
data == NULL || ret == NULL || size < 1) {
340 for(
int i = 0; i < size; i++) {
355 for(
int i = 0; i < size; i++) {
369 if(
data == NULL || size < 1) {
375 for(
int i = 1; i < size; i++) {
392 if(
data == NULL || size < 2) {
398 T tmp =
data[0] - mu;
401 for(
int i = 1; i < size; i++) {
407 return ret / T(size);
418 if(
data == NULL || size < 1) {
424 for(
int i = 1; i < size; i++) {
438 static T *
cumsum(T *vec,
int size, T *ret)
440 if(vec == NULL || size < 1) {
450 for(
int i = 1; i < size; i++) {
451 ret[i] = vec[i] + ret[i - 1];
466 memcpy(ret,
data,
sizeof(T) * size);
479 for(
int i = 0; i < size; i++) {
494 if(
data == NULL || size < 1) {
502 for(
int i = 1; i < size; i++) {
503 ret[i] = func(
data[i]);
518 if(
data == NULL || size < 1) {
525 for(
int i = 1; i < size; i++) {
544 if(
data == NULL || size < 1) {
551 for(
int i = 1; i < size; i++) {
569 static T
interp(T *x, T *y,
int size, T xval)
572 if((xval >= x[0]) && (xval <= x[sm1])) {
574 T *ptr = std::lower_bound(&x[0], &x[sm1], xval);
575 int offset =
MAX(0, (
int)(ptr - x - 1));
579 offset = offset2 - 1;
581 offset2 =
MIN(size - 1, offset + 1);
584 T t = (xval - x[offset]) / (x[offset2] - x[offset]);
586 return y[offset] * (T(1) - t) + t * y[offset2];
590 T t = (xval - x[sm2]) / (x[sm1] - x[sm2]);
591 return t * (y[sm1] - y[sm2]) + y[sm2];
593 T t = (xval - x[0]) / (x[1] - x[0]);
594 return t * (y[1] - y[0]) + y[0];
611 (key >
data[high - 1]) ||
612 (key <
data[low]) ) {
615 printf(
"\nbinSearchLeft: bounds error!\n");
622 mid = (low + high) / 2;
624 if(
data[mid] < key) {
static T getMax(T *data, int size, int &ind)
getMax
Definition: array.hpp:516
static T * genRange(T minVal, T step, T maxVal, T *ret, int &n)
genRange
Definition: array.hpp:156
static T * apply(T *data, int size, T *ret, T(*func)(T))
apply
Definition: array.hpp:492
Array< float > Arrayf
Arrayf.
Definition: array.hpp:643
static float normalize(float *data, int n, float norm_sq=-1.0f)
normalize
Definition: array.hpp:257
static T * linspace(T minVal, T maxVal, int n, T *ret)
linspace
Definition: array.hpp:180
static T interp(T *x, T *y, int size, T xval)
interp linearly interpolates x and y data
Definition: array.hpp:569
static T getMean(T *data, int size)
getMean
Definition: array.hpp:367
static T * genValue(T value, int n, T *ret)
genValue
Definition: array.hpp:132
static T * zeros(int n)
zeros
Definition: array.hpp:213
Array< T > * clone()
clone
Definition: array.hpp:119
static T distanceSq(T *data0, T *data1, int n)
distanceSq
Definition: array.hpp:195
static void mul(T *data, int size, T *ret)
mul
Definition: array.hpp:317
Array< int > Arrayi
Arrayi.
Definition: array.hpp:648
Array< unsigned int > Arrayui
Arrayui.
Definition: array.hpp:653
static void mul(T *data, int size, T scale)
mul
Definition: array.hpp:299
Array(int n)
Array.
Definition: array.hpp:53
int nData
Definition: array.hpp:37
static T sum(T *data, int size)
sum
Definition: array.hpp:416
bool bShallow
Definition: array.hpp:33
static T getMin(T *data, int size, int &ind)
getMin
Definition: array.hpp:542
static T * cumsum(T *vec, int size, T *ret)
cumsum
Definition: array.hpp:438
static T dot(T *data0, T *data1, int n)
dot
Definition: array.hpp:281
#define MIN(a, b)
Definition: math.hpp:69
Array(T *data, int nData, bool bShallow)
Array.
Definition: array.hpp:66
static T * assign(T data, T *ret, int size)
assign
Definition: array.hpp:477
T * data
Definition: array.hpp:36
static void div(T *data, int size, T value)
div
Definition: array.hpp:353
static T getVariance(T *data, int size)
getVariance
Definition: array.hpp:390
The Array class.
Definition: array.hpp:30
Definition: bilateral_separation.hpp:25
static T * assign(T *data, int size, T *ret)
assign
Definition: array.hpp:464
#define MAX(a, b)
Definition: math.hpp:73
static T norm(float *data, int n)
norm
Definition: array.hpp:245
static T * add(T *data, int size, T *ret)
add
Definition: array.hpp:334
static T norm_sq(float *data, int n)
norm_sq
Definition: array.hpp:227
~Array()
Definition: array.hpp:79
Array()
Array.
Definition: array.hpp:42
static int binSearchLeft(T *data, T key, int low, int high)
binSearchLeft
Definition: array.hpp:608
void allocate(int n)
allocate
Definition: array.hpp:88
void release()
release
Definition: array.hpp:106