12 #ifndef __SGVECTOR_H__
13 #define __SGVECTOR_H__
68 void random(T min_value, T max_value);
80 memcpy(result, vec,
sizeof(T)*len);
87 for (int32_t i=0; i<len; i++)
94 for (int32_t i=0; i<len; i++)
99 static void random_vector(T* vec, int32_t len, T min_value, T max_value);
102 static void randperm(T* perm, int32_t n);
105 static void permute(T* vec, int32_t n);
188 static inline void resize(T* &data, int64_t old_size, int64_t new_size)
190 if (old_size==new_size)
197 static T
twonorm(
const T* x, int32_t len);
228 for (int32_t i=0; i<n; i++)
229 r+=((v1[i]) ? 1 : 0) * ((v2[i]) ? 1 : 0);
237 for (int32_t i=0; i<n; i++)
251 const uint64_t* v1,
const uint64_t* v2, int32_t n)
254 for (int32_t i=0; i<n; i++)
261 const int64_t* v1,
const int64_t* v2, int32_t n)
264 for (int32_t i=0; i<n; i++)
272 const int32_t* v1,
const int32_t* v2, int32_t n)
275 for (int32_t i=0; i<n; i++)
283 const uint32_t* v1,
const uint32_t* v2, int32_t n)
286 for (int32_t i=0; i<n; i++)
294 const uint16_t* v1,
const uint16_t* v2, int32_t n)
297 for (int32_t i=0; i<n; i++)
305 const int16_t* v1,
const int16_t* v2, int32_t n)
308 for (int32_t i=0; i<n; i++)
316 const char* v1,
const char* v2, int32_t n)
319 for (int32_t i=0; i<n; i++)
327 const uint8_t* v1,
const uint8_t* v2, int32_t n)
330 for (int32_t i=0; i<n; i++)
338 const int8_t* v1,
const int8_t* v2, int32_t n)
341 for (int32_t i=0; i<n; i++)
349 const float64_t* v1,
const char* v2, int32_t n)
352 for (int32_t i=0; i<n; i++)
360 T* target,
const T* v1,
const T* v2,int32_t len)
362 for (int32_t i=0; i<len; i++)
363 target[i]=v1[i]*v2[i];
369 T* target, T alpha,
const T* v1, T beta,
const T* v2,
372 for (int32_t i=0; i<len; i++)
373 target[i]=alpha*v1[i]+beta*v2[i];
379 for (int32_t i=0; i<len; i++)
386 for (int32_t i=0; i<len; i++)
391 static inline T
sum(T* vec, int32_t len)
394 for (int32_t i=0; i<len; i++)
408 static T
min(T* vec, int32_t len);
411 static T
max(T* vec, int32_t len);
414 static inline int32_t
arg_max(T * vec, int32_t inc, int32_t len, T * maxv_ptr = NULL)
416 ASSERT(len > 0 || inc > 0);
421 for (int32_t i = 1, j = inc ; i < len ; i++, j += inc)
424 maxv = vec[j], maxIdx = i;
427 if (maxv_ptr != NULL)
434 static inline int32_t
arg_min(T * vec, int32_t inc, int32_t len, T * minv_ptr = NULL)
436 ASSERT(len > 0 || inc > 0);
441 for (int32_t i = 1, j = inc ; i < len ; i++, j += inc)
444 minv = vec[j], minIdx = i;
447 if (minv_ptr != NULL)
454 static T
sum_abs(T* vec, int32_t len);
462 static int32_t
unique(T* output, int32_t
size);
469 const char* prefix=
"")
const;
473 const T*
vector, int32_t n,
const char* name=
"vector",
474 const char* prefix=
"");
479 const char* prefix=
"");
489 template <
typename Predicate>
526 IndexSorter cmp(
this);
562 #endif // __SGVECTOR_H__