Xmipp  v3.23.11-Nereus
Functions
Vector Operations
Collaboration diagram for Vector Operations:

Functions

template<class T >
std::vector< T > operator+ (const std::vector< T > &v, const T &a)
 
template<class T >
std::vector< T > operator+ (const T &a, const std::vector< T > &v)
 
template<class T >
std::vector< T > operator- (const std::vector< T > &v, const T &a)
 
template<class T >
std::vector< T > operator- (const T &a, const std::vector< T > &v)
 
template<class T >
std::vector< T > operator* (const std::vector< T > &v, T a)
 
template<class T >
std::vector< T > operator* (T a, const std::vector< T > &v)
 
template<class T >
std::vector< T > operator/ (const std::vector< T > &v, T a)
 
template<class T >
std::vector< T > operator/ (T a, const std::vector< T > &v)
 
template<class T >
std::vector< T > & operator*= (std::vector< T > &v1, const std::vector< T > &v2)
 
template<class T >
std::vector< T > & operator/= (std::vector< T > &v1, const std::vector< T > &v2)
 
template<class T >
std::vector< T > randomVector (const unsigned &_size, const T &_lower, const T &_upper)
 
template<class T >
std::vector< T > & operator+= (std::vector< T > &_v1, const std::vector< T > &_v2)
 
template<class T >
std::vector< T > & operator-= (std::vector< T > &_v1, const std::vector< T > &_v2)
 
template<class T >
std::vector< T > operator+ (const std::vector< T > &_v1, const std::vector< T > &_v2)
 
template<class T >
std::vector< T > operator- (const std::vector< T > &_v1, const std::vector< T > &_v2)
 
template<class T >
operator* (const std::vector< T > &_v1, const std::vector< T > &_v2)
 
template<class T >
std::vector< T > & operator*= (std::vector< T > &_v, const T _alpha)
 
template<class T >
std::vector< T > & operator/= (std::vector< T > &_v, const T _alpha)
 
template<class T >
std::ostream & operator<< (std::ostream &_os, const std::vector< T > &_v)
 
template<class T >
std::istream & operator>> (std::istream &_is, std::vector< T > &_v)
 
template<class T >
double euclideanDistance (const std::vector< T > &_v1, const std::vector< T > &_v2)
 
template<class T >
norm (const std::vector< T > &v)
 

Detailed Description

Function Documentation

◆ euclideanDistance()

template<class T >
double euclideanDistance ( const std::vector< T > &  _v1,
const std::vector< T > &  _v2 
)

Euclidean distance

Definition at line 377 of file vector_ops.h.

378 {
379  if (_v1.size() != _v2.size())
380  throw std::runtime_error("vector of different size in eDist");
381 
382  double dist = 0;
383  auto i = _v1.begin();
384  auto j = _v2.begin();
385  for (; i < _v1.end(); i++, j++)
386  {
387  double tmp = (double)(*i) - (double)(*j);
388  dist += tmp * tmp;
389  }
390 
391  return sqrt(dist);
392 }
void sqrt(Image< double > &op)
#define i
#define j

◆ norm()

template<class T >
T norm ( const std::vector< T > &  v)

Norm: norm of a vector (Euclidean distance to origin)

Definition at line 399 of file vector_ops.h.

400 {
401  double sum = 0.0;
402  typename std::vector<T>::const_iterator i;
403  for (i = v.begin(); i != v.end(); i++)
404  sum += (double)(*i) * (double)(*i);
405  return (T) sqrt(sum);
406 }
void sqrt(Image< double > &op)
#define i

◆ operator*() [1/3]

template<class T >
std::vector<T> operator* ( const std::vector< T > &  v,
a 
)

Multiply a vector "v" by a scalar "a" returns a vector example: r = v*a

Definition at line 99 of file vector_ops.h.

100 {
101  std::vector<T> tmp = v;
102  transform(tmp.begin(), tmp.end(), tmp.begin(), bind2nd(std::multiplies<T>(), a));
103  return tmp;
104 }
doublereal * a

◆ operator*() [2/3]

template<class T >
std::vector<T> operator* ( a,
const std::vector< T > &  v 
)

Multiply a scalar "a" by a vector "v" returns a vector example: r = a*v

Definition at line 111 of file vector_ops.h.

112 {
113  std::vector<T> tmp = v;
114  transform(tmp.begin(), tmp.end(), tmp.begin(), bind2nd(std::multiplies<T>(), a));
115  return tmp;
116 }
doublereal * a

◆ operator*() [3/3]

template<class T >
T operator* ( const std::vector< T > &  _v1,
const std::vector< T > &  _v2 
)

Dot product. Ref Stroustrup, p 301. Parameter: _v1 First argument Parameter: _v2 Second argument

Exceptions
DifferentSizeif _v1 and _v2 hasn't the same size

Definition at line 269 of file vector_ops.h.

270 {
271  if (_v1.size() != _v2.size())
272  throw std::runtime_error("different size vectors in *");
273 
274  T dotProd = 0;
275  typename std::vector<T>::const_iterator i;
276  typename std::vector<T>::const_iterator j;
277  for (i = _v1.begin(), j = _v2.begin() ; i != _v1.end() ; i++, j++)
278  dotProd += *i * *j;
279 
280  return dotProd;
281 }
#define i
#define j

◆ operator*=() [1/2]

template<class T >
std::vector<T>& operator*= ( std::vector< T > &  v1,
const std::vector< T > &  v2 
)

*= operator returns a vector example: v = v*r

Definition at line 148 of file vector_ops.h.

149 {
150  transform(v1.begin(), v1.end(), v2.begin(), v1.begin(), std::multiplies<T>());
151  return v1;
152 }
double v1

◆ operator*=() [2/2]

template<class T >
std::vector<T>& operator*= ( std::vector< T > &  _v,
const T  _alpha 
)

Multiplies each element times _alpha. Ref Stroustrup, p 301. Parameter: _v The container Parameter: _alpha The element to be multiplied by each element in the container

Definition at line 289 of file vector_ops.h.

290 {
291  typename std::vector<T>::iterator i;
292  for (i = _v.begin() ; i != _v.end() ; i++)
293  *i *= _alpha;
294 
295  return _v;
296 }
#define i

◆ operator+() [1/3]

template<class T >
std::vector<T> operator+ ( const std::vector< T > &  v,
const T &  a 
)

Adds a scalar "a" to a vector "v" returns a vector example: r = v+a

Definition at line 51 of file vector_ops.h.

52 {
53  std::vector<T> tmp = v;
54  transform(tmp.begin(), tmp.end(), tmp.begin(), bind2nd(std::plus<T>(), a));
55  return tmp;
56 }
doublereal * a

◆ operator+() [2/3]

template<class T >
std::vector<T> operator+ ( const T &  a,
const std::vector< T > &  v 
)

Adds a vector "v" to a scalar "a" returns a vector example: r = a+v

Definition at line 63 of file vector_ops.h.

64 {
65  std::vector<T> tmp = v;
66  transform(tmp.begin(), tmp.end(), tmp.begin(), bind2nd(std::plus<T>(), a));
67  return tmp;
68 }
doublereal * a

◆ operator+() [3/3]

template<class T >
std::vector<T> operator+ ( const std::vector< T > &  _v1,
const std::vector< T > &  _v2 
)
  • operator. Ref Stroustrup, p 301. Parameter: _v1 First argument Parameter: _v2 Second argument
    Exceptions
    DifferentSizeif _v1 and _v2 hasn't the same size

Definition at line 229 of file vector_ops.h.

230 {
231  if (_v1.size() != _v2.size())
232  throw std::runtime_error("different size vectors in +");
233 
234  // temp. container
235  std::vector<T> tmp(_v1.size());
236 
237  transform(_v1.begin(), _v1.end(), _v2.begin(), tmp.begin(),
238  std::plus<T>());
239  return tmp;
240 }

◆ operator+=()

template<class T >
std::vector<T>& operator+= ( std::vector< T > &  _v1,
const std::vector< T > &  _v2 
)

+= operator. Ref Stroustrup, p 301. Parameter: _v1 First argument Parameter: _v2 Second argument

Exceptions
DifferentSizeif _v1 and _v2 hasn't the same size

Definition at line 193 of file vector_ops.h.

194 {
195  if (_v1.size() != _v2.size())
196  throw std::runtime_error("different size vectors in +=");
197 
198  transform(_v1.begin(), _v1.end(), _v2.begin(), _v1.begin(),
199  std::plus<T>());
200 
201  return _v1;
202 }

◆ operator-() [1/3]

template<class T >
std::vector<T> operator- ( const std::vector< T > &  v,
const T &  a 
)

Subtract a scalar "a" to a vector "v" returns a vector example: r = v-a

Definition at line 75 of file vector_ops.h.

76 {
77  std::vector<T> tmp = v;
78  transform(tmp.begin(), tmp.end(), tmp.begin(), bind2nd(std::minus<T>(), a));
79  return tmp;
80 }
doublereal * a

◆ operator-() [2/3]

template<class T >
std::vector<T> operator- ( const T &  a,
const std::vector< T > &  v 
)

Subtract a vector "v" to a scalar "a" returns a vector example: r = a-v

Definition at line 87 of file vector_ops.h.

88 {
89  std::vector<T> tmp(v.size(), a);
90  transform(tmp.begin(), tmp.end(), v.begin(), tmp.begin(), std::minus<T>());
91  return tmp;
92 }
doublereal * a

◆ operator-() [3/3]

template<class T >
std::vector<T> operator- ( const std::vector< T > &  _v1,
const std::vector< T > &  _v2 
)
  • operator. Ref Stroustrup, p 301. Parameter: _v1 First argument Parameter: _v2 Second argument
    Exceptions
    DifferentSizeif _v1 and _v2 hasn't the same size

Definition at line 249 of file vector_ops.h.

250 {
251  if (_v1.size() != _v2.size())
252  throw std::runtime_error("different size vectors in -");
253 
254  // temp. container
255  std::vector<T> tmp(_v1.size());
256 
257  transform(_v1.begin(), _v1.end(), _v2.begin(), tmp.begin(),
258  std::minus<T>());
259  return tmp;
260 }

◆ operator-=()

template<class T >
std::vector<T>& operator-= ( std::vector< T > &  _v1,
const std::vector< T > &  _v2 
)

-= operator. Ref Stroustrup, p 301. Parameter: _v1 First argument Parameter: _v2 Second argument

Exceptions
DifferentSizeif _v1 and _v2 hasn't the same size

Definition at line 211 of file vector_ops.h.

212 {
213  if (_v1.size() != _v2.size())
214  throw std::runtime_error("different size vectors in -=");
215 
216  transform(_v1.begin(), _v1.end(), _v2.begin(), _v1.begin(),
217  std::minus<T>());
218 
219  return _v1;
220 }

◆ operator/() [1/2]

template<class T >
std::vector<T> operator/ ( const std::vector< T > &  v,
a 
)

Divides a vector "v" by a scalar "a" returns a vector example: r = v/a

Definition at line 124 of file vector_ops.h.

125 {
126  std::vector<T> tmp = v;
127  transform(tmp.begin(), tmp.end(), tmp.begin(), bind2nd(std::divides<T>(), a));
128  return tmp;
129 }
doublereal * a

◆ operator/() [2/2]

template<class T >
std::vector<T> operator/ ( a,
const std::vector< T > &  v 
)

Divides a scalar "a" by a vector "v" returns a vector example: r = a/v

Definition at line 136 of file vector_ops.h.

137 {
138  std::vector<T> tmp(v.size(), a);
139  transform(tmp.begin(), tmp.end(), v.begin(), tmp.begin(), std::divides<T>());
140  return tmp;
141 }
doublereal * a

◆ operator/=() [1/2]

template<class T >
std::vector<T>& operator/= ( std::vector< T > &  v1,
const std::vector< T > &  v2 
)

/= operator returns a vector example: v = v/r

Definition at line 159 of file vector_ops.h.

160 {
161  transform(v1.begin(), v1.end(), v2.begin(), v1.begin(), std::divides<T>());
162  return v1;
163 }
double v1

◆ operator/=() [2/2]

template<class T >
std::vector<T>& operator/= ( std::vector< T > &  _v,
const T  _alpha 
)

Divides each element by _alpha. Ref Stroustrup, p 301. Parameter: _v The container Parameter: _alpha The element to be multiplied by each element in the container

Definition at line 304 of file vector_ops.h.

305 {
306  typename std::vector<T>::iterator i;
307  for (i = _v.begin() ; i != _v.end() ; i++)
308  *i /= _alpha;
309 
310  return _v;
311 }
#define i

◆ operator<<()

template<class T >
std::ostream& operator<< ( std::ostream &  _os,
const std::vector< T > &  _v 
)

Standard output for a std::vector<T> Parameter: _os The output stream Parameter: _v The container to be printed

Definition at line 319 of file vector_ops.h.

320 {
321  _os << "< ";
322  typename std::vector<T>::const_iterator i;
323  for (i = _v.begin(); i != _v.end(); i++) _os << *i << " ";
324  _os << ">";
325  return _os;
326 }
#define i

◆ operator>>()

template<class T >
std::istream& operator>> ( std::istream &  _is,
std::vector< T > &  _v 
)

Standard input for a std::vector<T> Parameter: _is The input stream Parameter: _v The container to be read

Exceptions
runtime_errorIf there are problems reading the vector

Definition at line 335 of file vector_ops.h.

336 {
337  _v.clear();
338 
339  char c;
340  _is >> c;
341 
342  if (_is && c != '<')
343  _is.setstate(std::ios::failbit);
344 
345  bool finish = false;
346 
347  while (_is && !finish)
348  {
349  _is >> c;
350 
351  if (!_is)
352  return _is;
353 
354  if (c == '>')
355  finish = true;
356  else
357  {
358  _is.putback(c);
359  T item;
360  _is >> item;
361 
362  if (_is)
363  _v.push_back(item);
364  else
365  return _is;
366  }
367  }
368 
369  if (!_is)
370  throw std::runtime_error("Error reading the vector");
371 
372  return _is;
373 }
doublereal * c

◆ randomVector()

template<class T >
std::vector<T> randomVector ( const unsigned &  _size,
const T &  _lower,
const T &  _upper 
)

Returns a random initialized vector Parameter: _size Size of vector Parameter: _lower Lower value for random elements Parameter: _upper Upper value for random elements

Definition at line 175 of file vector_ops.h.

177 {
178  std::vector<T> v(_size);
179  std::random_device rd; //Will be used to obtain a seed for the random number engine
180  std::mt19937 gen(rd()); //Standard mersenne_twister_engine seeded with rd()
181  std::uniform_real_distribution<> dist(_lower, _upper);
182  std::generate(v.begin(), v.end(), [&]{ return dist(gen); });
183  return v;
184 }