2 #ifndef vnl_c_vector_h_ 3 #define vnl_c_vector_h_ 26 # include <vcl_msvc_warnings.h> 29 #include <vnl/vnl_export.h> 46 static T sum(T
const*
v,
unsigned n);
50 static void apply(T
const *,
unsigned, T (*f)(T), T* v_out);
51 static void apply(T
const *,
unsigned, T (*f)(T
const&), T* v_out);
54 static void copy (T
const *x, T *y,
unsigned);
57 static void scale (T
const *x, T *y,
unsigned, T
const &);
60 static void add (T
const *x, T
const *y, T *z,
unsigned);
63 static void add (T
const *x, T
const& y, T *z,
unsigned);
66 static void subtract(T
const *x, T
const *y, T *z,
unsigned);
69 static void subtract(T
const *x, T
const& y, T *z,
unsigned);
72 static void multiply(T
const *x, T
const *y, T *z,
unsigned);
75 static void multiply(T
const *x, T
const& y, T *z,
unsigned);
78 static void divide (T
const *x, T
const *y, T *z,
unsigned);
81 static void divide (T
const *x, T
const& y, T *z,
unsigned);
85 static void negate (T
const *x, T *y,
unsigned);
88 static void invert (T
const *x, T *y,
unsigned);
91 static void saxpy (T
const &a, T
const *x, T *y,
unsigned);
94 static void fill (T *x,
unsigned, T
const &
v);
97 static void reverse (T *x,
unsigned);
98 static T
dot_product (T
const *, T
const *,
unsigned);
102 static void conjugate(T
const *, T *,
unsigned);
104 static T max_value(T
const *,
unsigned);
105 static T min_value(T
const *,
unsigned);
106 static unsigned arg_max(T
const *,
unsigned);
107 static unsigned arg_min(T
const *,
unsigned);
109 static T mean(T
const *p,
unsigned n) {
return T(sum(p,n)/
abs_t(n)); }
114 static inline real_t std(T
const *p,
unsigned n) {
118 static T sum_sq_diff_means(T
const*
v,
unsigned n);
121 static inline abs_t one_norm(T
const *p,
unsigned n)
125 static inline abs_t two_norm(T
const *p,
unsigned n)
129 static inline abs_t inf_norm(T
const *p,
unsigned n)
133 static inline abs_t two_nrm2(T
const *p,
unsigned n)
137 static inline abs_t rms_norm(T
const *p,
unsigned n)
142 static T euclid_dist_sq(T
const *, T
const *,
unsigned);
145 static T** allocate_Tptr(
const std::size_t n);
146 static T* allocate_T(
const std::size_t n);
147 static void deallocate(T**,
const std::size_t n_when_allocated);
148 static void deallocate(T*,
const std::size_t n_when_allocated);
153 template <
class T> VNL_EXPORT
154 std::ostream&
print_vector(std::ostream&, T
const*,
unsigned);
156 #endif // vnl_c_vector_h_ VNL_EXPORT T dot_product(m const &, m const &)
VNL_EXPORT std::ostream & print_vector(std::ostream &, T const *, unsigned)
Input & output.
Templated zero/one/precision.
VNL_EXPORT void vnl_c_vector_rms_norm(T const *p, unsigned n, S *out)
vnl_c_vector interfaces to lowlevel memory-block operations.
VNL_EXPORT void vnl_c_vector_inf_norm(T const *p, unsigned n, S *out)
void add(const vnl_bignum &b1, const vnl_bignum &b2, vnl_bignum &sum)
add two non-infinite vnl_bignum values and save their sum.
vnl_numeric_traits< T >::real_t real_t
vnl_bignum squared_magnitude(vnl_bignum const &x)
void subtract(const vnl_bignum &bmax, const vnl_bignum &bmin, vnl_bignum &diff)
subtract bmin from bmax (unsigned, non-infinite), result in diff.
Data normalize(const vnl_bignum &b1, const vnl_bignum &b2, vnl_bignum &u, vnl_bignum &v)
normalize two vnl_bignums.
VNL_EXPORT T inner_product(m const &, m const &)
vnl_numeric_traits< T >::abs_t abs_t
VNL_EXPORT void vnl_c_vector_one_norm(T const *p, unsigned n, S *out)
void divide(const vnl_bignum &b1, const vnl_bignum &b2, vnl_bignum &q, vnl_bignum &r)
divide b2 into b1, getting quotient q and remainder r.
VNL_EXPORT void vnl_c_vector_two_norm(T const *p, unsigned n, S *out)
VNL_EXPORT void vnl_c_vector_two_norm_squared(T const *p, unsigned n, S *out)