Xmipp  v3.23.11-Nereus
Classes | Public Types | Public Member Functions | Public Attributes | Static Public Attributes | List of all members
Vector Class Reference

#include <Vector.h>

Collaboration diagram for Vector:
Collaboration graph
[legend]

Classes

struct  VectorDataTag
 

Public Types

typedef struct Vector::VectorDataTag VectorData
 

Public Member Functions

void prepareExtend (int new_extention)
 
void alloc (int n, int ext)
 
 Vector (int _n=0)
 
 Vector (int _n, int _ext)
 
 Vector (int _n, double *dd, char externalData=0)
 
 Vector (char *filename)
 
 Vector (char *line, int guess_on_size)
 
 Vector (Vector a, Vector b)
 
char * getFromLine (char *line)
 
void extend ()
 
void setSize (int _n)
 
void exactshape ()
 
void print ()
 
void save (char *filename, char ascii)
 
void save (FILE *f, char ascii)
 
void appendToMatrixFile (char *saveFileName, char **names=NULL)
 
void setExternalData (int _n, double *dd)
 
Vector clone ()
 
void copyFrom (Vector r, int _n=0)
 
 Vector (const Vector &P)
 
Vectoroperator= (const Vector &P)
 
void destroyCurrentBuffer ()
 
 ~Vector ()
 
unsigned sz ()
 
int operator== (const Vector Q)
 
int equals (const Vector Q)
 
 operator double * () const
 
void setPart (int i, Vector v, int n=0, int ii=0)
 
double euclidianNorm ()
 
double L1Norm ()
 
double LnftyNorm ()
 
double euclidianDistance (Vector v)
 
double L1Distance (Vector v)
 
double LnftyDistance (Vector v)
 
double square ()
 
void multiply (double a)
 
void multiply (Vector R, double a)
 
void zero (int _i=0, int _n=0)
 
void set (double dd)
 
void shift (int s)
 
double scalarProduct (Vector v)
 
void oneByOneMutiply (Vector r)
 
void oneByOneInvert ()
 
double mmin ()
 
double mmax ()
 
bool isNull ()
 
Vector operator- (Vector v)
 
Vector operator+ (Vector v)
 
Vector operator-= (Vector v)
 
Vector operator+= (Vector v)
 
void addInPlace (double a, Vector v)
 
void addInPlace (double a, int i, Matrix m)
 
void transposeAndMultiply (Vector vR, Matrix M)
 
void diagonalizeAndMultiply (Matrix M)
 
void permutIn (Vector vR, VectorInt viP)
 
void permutOut (Vector vR, VectorInt viP)
 

Public Attributes

VectorDatad = nullptr
 

Static Public Attributes

static Vector emptyVector
 

Detailed Description

Definition at line 37 of file Vector.h.

Member Typedef Documentation

◆ VectorData

Constructor & Destructor Documentation

◆ Vector() [1/7]

Vector::Vector ( int  _n = 0)

Definition at line 49 of file Vector.cpp.

50 {
51  alloc(n,n);
52  zero();
53 }
void zero(int _i=0, int _n=0)
Definition: Vector.cpp:93
void alloc(int n, int ext)
Definition: Vector.cpp:36
int * n

◆ Vector() [2/7]

Vector::Vector ( int  _n,
int  _ext 
)

Definition at line 55 of file Vector.cpp.

56 {
57  alloc(n,ext);
58  zero();
59 }
void zero(int _i=0, int _n=0)
Definition: Vector.cpp:93
void alloc(int n, int ext)
Definition: Vector.cpp:36
int * n

◆ Vector() [3/7]

Vector::Vector ( int  _n,
double *  dd,
char  externalData = 0 
)

Definition at line 61 of file Vector.cpp.

62 {
63  alloc(n,n);
64  if (dd)
65  {
66  if (_exte) { d->externalData=1; d->p=dd; }
67  else memcpy(d->p,dd,n*sizeof(double));
68  }
69  else zero();
70 }
void zero(int _i=0, int _n=0)
Definition: Vector.cpp:93
void alloc(int n, int ext)
Definition: Vector.cpp:36
VectorData * d
Definition: Vector.h:50
int * n

◆ Vector() [4/7]

Vector::Vector ( char *  filename)

Definition at line 431 of file Vector.cpp.

432 {
433  unsigned _n;
434  std::ifstream ifp(filename, std::ios::in | std::ios::binary);
435  ifp.read(reinterpret_cast<char*>(&_n), sizeof(int));
436  alloc(_n,_n);
437  ifp.read(reinterpret_cast<char*>(d->p), d->n*sizeof(double));
438  ifp.close();
439 }
int in
void alloc(int n, int ext)
Definition: Vector.cpp:36
VectorData * d
Definition: Vector.h:50

◆ Vector() [5/7]

Vector::Vector ( char *  line,
int  guess_on_size 
)

Definition at line 543 of file Vector.cpp.

544 {
545  char *tline=line,*oldtline=NULL;
546 
547  if (gn==0)
548  {
549  while ((*tline!=EOL1)&&(*tline!=EOL2))
550  {
551  while ((*tline==' ')||
552  (*tline=='\t'))tline++;
553  if ((*tline==EOL1)||(*tline==EOL2)||(*tline==0)) break;
554  while (isANumber(*tline)) tline++;
555  gn++;
556  if (oldtline==tline)
557  {
558  alloc(gn-1,gn-1);
559  return;
560  //tline[10]=0;
561  //printf("Error in simulation output file. The full line is:\n"
562  // "%s\n"
563  // "There is an error here:\n"
564  // "%s\n",line,tline);
565  }
566  oldtline=tline;
567  };
568  };
569 
570  if (gn==0) { alloc(0,0); return; };
571  alloc(gn,gn);
572  getFromLine(line);
573 }
#define EOL2
Definition: Vector.cpp:532
char * getFromLine(char *line)
Definition: Vector.cpp:575
void alloc(int n, int ext)
Definition: Vector.cpp:36
#define EOL1
Definition: Vector.cpp:531
char isANumber(char c)
Definition: Vector.cpp:534

◆ Vector() [6/7]

Vector::Vector ( Vector  a,
Vector  b 
)

Definition at line 72 of file Vector.cpp.

73 {
74  int n=a.sz()+b.sz();
75  alloc(n,n);
76  memcpy(d->p ,a,a.sz()*sizeof(double));
77  memcpy(d->p+a.sz(),b,b.sz()*sizeof(double));
78 }
unsigned sz()
Definition: Vector.h:79
doublereal * b
void alloc(int n, int ext)
Definition: Vector.cpp:36
VectorData * d
Definition: Vector.h:50
int * n

◆ Vector() [7/7]

Vector::Vector ( const Vector P)

Definition at line 188 of file Vector.cpp.

189 {
190  // shallow copy
191  d=A.d;
192  (d->ref_count)++ ;
193 }
VectorData * d
Definition: Vector.h:50

◆ ~Vector()

Vector::~Vector ( )

Definition at line 172 of file Vector.cpp.

173 {
175 }
void destroyCurrentBuffer()
Definition: Vector.cpp:177

Member Function Documentation

◆ addInPlace() [1/2]

void Vector::addInPlace ( double  a,
Vector  v 
)

Definition at line 416 of file Vector.cpp.

417 {
418  int ni=sz();
419  double *xp1=d->p, *xp2=v.d->p;
420  if (a==1.0) while (ni--) *(xp1++)+= *(xp2++);
421  else while (ni--) *(xp1++)+=a * (*(xp2++));
422 }
unsigned sz()
Definition: Vector.h:79
VectorData * d
Definition: Vector.h:50
int ni
doublereal * a

◆ addInPlace() [2/2]

void Vector::addInPlace ( double  a,
int  i,
Matrix  m 
)

Definition at line 424 of file Vector.cpp.

425 {
426  int ni=sz();
427  double *xp1=d->p, *xp2=((double**)m)[i];
428  while (ni--) *(xp1++)+=a * (*(xp2++));
429 }
#define i
unsigned sz()
Definition: Vector.h:79
VectorData * d
Definition: Vector.h:50
int ni
doublereal * a

◆ alloc()

void Vector::alloc ( int  n,
int  ext 
)

Definition at line 36 of file Vector.cpp.

37 {
38  d=new VectorData();
39  d->n=_n;
40  d->extention=_ext;
41  d->ref_count=1;
42 
43  if (_ext==0) { d->p=NULL; return; };
44 
45  d->p=(double*)malloc(_ext*sizeof(double));
46  if (d->p==NULL) { printf("memory allocation error\n"); getchar(); exit(253); }
47 }
VectorData * d
Definition: Vector.h:50
struct Vector::VectorDataTag VectorData

◆ appendToMatrixFile()

void Vector::appendToMatrixFile ( char *  saveFileName,
char **  names = NULL 
)

Definition at line 612 of file Vector.cpp.

613 {
614  FILE *f=fopen(saveFileName,"rb+");
615  if (f==NULL)
616  {
617  Matrix t(*this);
618  if (names) t.setColNames(names);
619  t.save(saveFileName,0);
620  return;
621  }
622  int nc=sz();
623  fseek(f,0,SEEK_END);
624  unsigned l=ftell(f);
625  if (l==0)
626  {
627  Matrix t(*this);
628  if (names) t.setColNames(names);
629  t.save(saveFileName,0);
630  return;
631  }
632  fwrite(d->p,sizeof(double)*nc,1,f);
633  unsigned nlfile;
634  fseek(f,13,SEEK_SET);
635  if (fread(&nlfile,sizeof(int),1,f) != sizeof(int)) {
636  std::cerr << "error while appending to file " << saveFileName << std::endl; exit(255);
637  }
638  nlfile++;
639  fseek(f,13,SEEK_SET);
640  fwrite(&nlfile, sizeof(unsigned), 1, f);
641  fclose(f);
642 }
unsigned sz()
Definition: Vector.h:79
double * f
Definition: Matrix.h:38
VectorData * d
Definition: Vector.h:50

◆ clone()

Vector Vector::clone ( )

Definition at line 207 of file Vector.cpp.

208 {
209  // a deep copy
210  Vector r(sz());
211  r.copyFrom(*this);
212  return r;
213 }
Definition: Vector.h:37
unsigned sz()
Definition: Vector.h:79

◆ copyFrom()

void Vector::copyFrom ( Vector  r,
int  _n = 0 
)

Definition at line 215 of file Vector.cpp.

216 {
217  if (_n==0) _n=r.sz();
218  setSize(_n);
219  if (_n) memcpy(d->p,r.d->p,_n*sizeof(double));
220 }
void setSize(int _n)
Definition: Vector.cpp:112
unsigned sz()
Definition: Vector.h:79
VectorData * d
Definition: Vector.h:50

◆ destroyCurrentBuffer()

void Vector::destroyCurrentBuffer ( )

Definition at line 177 of file Vector.cpp.

178 {
179  if (!d) return;
180  (d->ref_count) --;
181  if (d->ref_count==0)
182  {
183  if ((d->p)&&(!d->externalData)) free(d->p);
184  delete d;
185  };
186 }
free((char *) ob)
VectorData * d
Definition: Vector.h:50

◆ diagonalizeAndMultiply()

void Vector::diagonalizeAndMultiply ( Matrix  M)

Definition at line 316 of file Vector.cpp.

317 {
318  int i,j,nl=M.nLine(),nc=M.nColumn();
319  if ((int)sz()!=nl)
320  {
321  printf("(matrix_diagonal * matrix) error");
322  getchar(); exit(249);
323  }
324  double **p1=M,*p2=(*this);
325 
326  for (i=0; i<nl; i++)
327  for (j=0; j<nc; j++)
328  p1[i][j]*=p2[i];
329 
330 }
int nColumn()
Definition: Matrix.h:84
#define i
unsigned sz()
Definition: Vector.h:79
int nLine()
Definition: Matrix.h:83
#define j

◆ equals()

int Vector::equals ( const Vector  Q)

Definition at line 135 of file Vector.cpp.

136 {
137  if (Q.d==d) return 1;
138  if (Q.d==emptyVector.d)
139  {
140  double *cP=d->p;
141  int i=sz();
142  while (i--) if (*(cP++)) return 0;
143  return 1;
144  }
145 
146  if (sz() != Q.sz()) return 0;
147 
148  double *cP = d->p, *cQ = Q.d->p;
149  int i = sz();
150 
151  while( i-- )
152  {
153  if (*cP!=*cQ) return 0;
154  cP++; cQ++;
155  }
156 
157  return 1;
158 }
#define i
unsigned sz()
Definition: Vector.h:79
VectorData * d
Definition: Vector.h:50
static Vector emptyVector
Definition: Vector.h:119

◆ euclidianDistance()

double Vector::euclidianDistance ( Vector  v)

Definition at line 244 of file Vector.cpp.

245 {
246  Vector t=(*this)-v;
247  return ::euclidianNorm(sz(), t.d->p);
248 /*
249  double *xp1=d->p, *xp2=v.d->p, sum=0;
250  int ni=sz();
251  while (ni--) sum+=sqr(*(xp1++)-*(xp2++));
252  return sqrt(sum);
253 */
254 }
Definition: Vector.h:37
unsigned sz()
Definition: Vector.h:79
double euclidianNorm(int i, double *xp)
Definition: tools.cpp:113
VectorData * d
Definition: Vector.h:50

◆ euclidianNorm()

double Vector::euclidianNorm ( )

Definition at line 222 of file Vector.cpp.

223 {
225 }
unsigned sz()
Definition: Vector.h:79
double euclidianNorm(int i, double *xp)
Definition: tools.cpp:113
VectorData * d
Definition: Vector.h:50

◆ exactshape()

void Vector::exactshape ( )

Definition at line 125 of file Vector.cpp.

126 {
127  if (d->extention!=d->n)
128  {
129  d->p=(double*)realloc(d->p,d->n*sizeof(double));
130  if (d->p==NULL) { printf("memory allocation error\n"); getchar(); exit(253); }
131  d->extention=d->n;
132  };
133 }
VectorData * d
Definition: Vector.h:50

◆ extend()

void Vector::extend ( )

Definition at line 119 of file Vector.cpp.

120 {
121  d->n++;
122  if (d->n>d->extention) prepareExtend(d->extention+100);
123 }
void prepareExtend(int new_extention)
Definition: Vector.cpp:99
VectorData * d
Definition: Vector.h:50

◆ getFromLine()

char * Vector::getFromLine ( char *  line)

Definition at line 575 of file Vector.cpp.

576 {
577  double *dp=d->p;
578  int n=sz(),k;
579  char *tline=line, *oldtline;
580  for (k=0; k<n; k++)
581  {
582  while ((*tline==' ')||
583  (*tline=='\t'))tline++;
584  if ((*tline==EOL1)||(*tline==EOL2))
585  {
586  setSize(k);
587  return tline;
588  }
589  oldtline=tline;
590  while(isANumber(*tline)) tline++;
591  if (!isANumber(*(tline-1)))
592  {
593  setSize(k);
594  return tline;
595  //tline[10]=0;
596  //printf( "Error in simulation output file. The full line is:\n"
597  // "%s\n"
598  // "There is an error here:\n"
599  // "%s\n",line,tline);
600  }
601  if (oldtline==tline)
602  {
603  setSize(k);
604  return tline;
605  };
606  if (*tline) { *tline='\0'; tline++; }
607  dp[k]=atof(oldtline);
608  }
609  return tline;
610 }
#define EOL2
Definition: Vector.cpp:532
ql0001_ & k(htemp+1),(cvec+1),(atemp+1),(bj+1),(bl+1),(bu+1),(x+1),(clamda+1), &iout, infoqp, &zero,(w+1), &lenw,(iw+1), &leniw, &glob_grd.epsmac
void setSize(int _n)
Definition: Vector.cpp:112
unsigned sz()
Definition: Vector.h:79
VectorData * d
Definition: Vector.h:50
#define EOL1
Definition: Vector.cpp:531
char isANumber(char c)
Definition: Vector.cpp:534
int * n

◆ isNull()

bool Vector::isNull ( )

Definition at line 358 of file Vector.cpp.

359 {
360  double *xp=d->p;
361  int ni=sz();
362  while (ni--) if (*(xp++)!=0) return false;
363  return true;
364 }
unsigned sz()
Definition: Vector.h:79
VectorData * d
Definition: Vector.h:50
int ni

◆ L1Distance()

double Vector::L1Distance ( Vector  v)

Definition at line 272 of file Vector.cpp.

273 {
274  if (sz()==0) return 0;
275  double *xp1=d->p, *xp2=v.d->p, sum=0;
276  int ni=sz();
277  while (ni--) sum+=condorAbs(*(xp1++)-*(xp2++));
278  return sum;
279 }
unsigned sz()
Definition: Vector.h:79
double condorAbs(const double t1)
Definition: tools.h:47
VectorData * d
Definition: Vector.h:50
int ni

◆ L1Norm()

double Vector::L1Norm ( )

Definition at line 227 of file Vector.cpp.

228 {
229  if (sz()==0) return 0;
230  double *x=d->p, sum=0;
231  int ni=sz();
232  while (ni--) sum+=condorAbs(*(x++));
233  return sum;
234 }
doublereal * x
unsigned sz()
Definition: Vector.h:79
double condorAbs(const double t1)
Definition: tools.h:47
VectorData * d
Definition: Vector.h:50
int ni

◆ LnftyDistance()

double Vector::LnftyDistance ( Vector  v)

Definition at line 256 of file Vector.cpp.

257 {
258  double *xp1=d->p, *xp2=v.d->p, sum=-1.0;
259  int ni=sz();
260  while (ni--) sum=::mmax(sum, condorAbs(*(xp1++)-*(xp2++)));
261  return sum;
262 }
unsigned sz()
Definition: Vector.h:79
double condorAbs(const double t1)
Definition: tools.h:47
VectorData * d
Definition: Vector.h:50
int ni
double mmax()
Definition: Vector.cpp:349

◆ LnftyNorm()

double Vector::LnftyNorm ( )

Definition at line 264 of file Vector.cpp.

265 {
266  double *xp1=d->p, sum=-1.0;
267  int ni=sz();
268  while (ni--) sum=::mmax(sum, condorAbs(*(xp1++)));
269  return sum;
270 }
unsigned sz()
Definition: Vector.h:79
double condorAbs(const double t1)
Definition: tools.h:47
VectorData * d
Definition: Vector.h:50
int ni
double mmax()
Definition: Vector.cpp:349

◆ mmax()

double Vector::mmax ( )

Definition at line 349 of file Vector.cpp.

350 {
351  if (sz()==0) return 0;
352  double *xp=d->p, m=-INF;
353  int ni=sz();
354  while (ni--) m=::mmax(m,*(xp++));
355  return m;
356 }
unsigned sz()
Definition: Vector.h:79
VectorData * d
Definition: Vector.h:50
int ni
int m
double mmax()
Definition: Vector.cpp:349
#define INF
Definition: svm.cpp:43

◆ mmin()

double Vector::mmin ( )

Definition at line 340 of file Vector.cpp.

341 {
342  if (sz()==0) return 0;
343  double *xp=d->p, m=INF;
344  int ni=sz();
345  while (ni--) m=::mmin(m,*(xp++));
346  return m;
347 }
double mmin()
Definition: Vector.cpp:340
unsigned sz()
Definition: Vector.h:79
VectorData * d
Definition: Vector.h:50
int ni
int m
#define INF
Definition: svm.cpp:43

◆ multiply() [1/2]

void Vector::multiply ( double  a)

Definition at line 281 of file Vector.cpp.

282 {
283  double *xp=d->p;
284  int ni=sz();
285  while (ni--) *(xp++)*=a;
286 }
unsigned sz()
Definition: Vector.h:79
VectorData * d
Definition: Vector.h:50
int ni
doublereal * a

◆ multiply() [2/2]

void Vector::multiply ( Vector  R,
double  a 
)

Definition at line 288 of file Vector.cpp.

289 {
290  int ni=sz();
291  R.setSize(ni);
292  double *xs=d->p, *xd=R;
293  while (ni--) *(xd++)=a * (*(xs++));
294 }
void setSize(int _n)
Definition: Vector.cpp:112
unsigned sz()
Definition: Vector.h:79
VectorData * d
Definition: Vector.h:50
int ni
doublereal * a

◆ oneByOneInvert()

void Vector::oneByOneInvert ( )

Definition at line 383 of file Vector.cpp.

384 {
385  int i=sz();
386  double *xb=(*this);
387  while (i--) xb[i]=1/xb[i];
388 }
#define i
unsigned sz()
Definition: Vector.h:79

◆ oneByOneMutiply()

void Vector::oneByOneMutiply ( Vector  r)

Definition at line 376 of file Vector.cpp.

377 {
378  int i=::mmin(sz(),rescaling.sz());
379  double *xb=(*this), *r=rescaling;
380  while (i--) xb[i]*=r[i];
381 }
#define i
double mmin()
Definition: Vector.cpp:340
unsigned sz()
Definition: Vector.h:79

◆ operator double *()

Vector::operator double * ( ) const
inline

Definition at line 83 of file Vector.h.

83 { if (d) return d->p; else return NULL; };
VectorData * d
Definition: Vector.h:50

◆ operator+()

Vector Vector::operator+ ( Vector  v)

Definition at line 390 of file Vector.cpp.

391 {
392  int ni=sz();
393  Vector r(sz());
394  double *xp1=r.d->p, *xp2=v.d->p, *xp3=d->p;
395  while (ni--)
396  *(xp1++)+=*(xp3++)+*(xp2++);
397  return r;
398 }
Definition: Vector.h:37
unsigned sz()
Definition: Vector.h:79
VectorData * d
Definition: Vector.h:50
int ni

◆ operator+=()

Vector Vector::operator+= ( Vector  v)

Definition at line 408 of file Vector.cpp.

409 {
410  int ni=sz();
411  double *xp1=d->p, *xp2=v.d->p;
412  while (ni--) *(xp1++)+=*(xp2++);
413  return *this;
414 }
unsigned sz()
Definition: Vector.h:79
VectorData * d
Definition: Vector.h:50
int ni

◆ operator-()

Vector Vector::operator- ( Vector  v)

Definition at line 366 of file Vector.cpp.

367 {
368  int ni=sz();
369  Vector r(sz());
370  double *xp1=r.d->p, *xp2=v.d->p, *xp3=d->p;
371  while (ni--)
372  *(xp1++)+=*(xp3++)-*(xp2++);
373  return r;
374 }
Definition: Vector.h:37
unsigned sz()
Definition: Vector.h:79
VectorData * d
Definition: Vector.h:50
int ni

◆ operator-=()

Vector Vector::operator-= ( Vector  v)

Definition at line 400 of file Vector.cpp.

401 {
402  int ni=sz();
403  double *xp1=d->p, *xp2=v.d->p;
404  while (ni--) *(xp1++)-=*(xp2++);
405  return *this;
406 }
unsigned sz()
Definition: Vector.h:79
VectorData * d
Definition: Vector.h:50
int ni

◆ operator=()

Vector & Vector::operator= ( const Vector P)

Definition at line 195 of file Vector.cpp.

196 {
197  // shallow copy
198  if (this != &A)
199  {
201  d=A.d;
202  (d->ref_count) ++ ;
203  }
204  return *this;
205 }
VectorData * d
Definition: Vector.h:50
void destroyCurrentBuffer()
Definition: Vector.cpp:177

◆ operator==()

int Vector::operator== ( const Vector  Q)
inline

Definition at line 81 of file Vector.h.

81 { return d==Q.d; };
VectorData * d
Definition: Vector.h:50

◆ permutIn()

void Vector::permutIn ( Vector  vR,
VectorInt  viP 
)

Definition at line 501 of file Vector.cpp.

502 {
503  int i,n=sz(), *ii=viP;
504  if (!n) return;
505  if (n!=viP.sz())
506  {
507  printf("error in permutation IN: sizes don't agree.\n"); getchar(); exit(255);
508  }
509  vR.setSize(n);
510  double *ps=(*this), *pd=vR; // pointer source / destination
511  for (i=0; i<n; i++)
512 // *(pd++)=ps[ii[i]];
513  pd[ii[i]]=*(ps++);
514 }
int sz()
Definition: VectorInt.h:63
#define i
void setSize(int _n)
Definition: Vector.cpp:112
unsigned sz()
Definition: Vector.h:79
int * n

◆ permutOut()

void Vector::permutOut ( Vector  vR,
VectorInt  viP 
)

Definition at line 516 of file Vector.cpp.

517 {
518  int i,n=sz(), *ii=viP;
519  if (!n) return;
520  if (n!=viP.sz())
521  {
522  printf("error in permutation IN: sizes don't agree.\n"); getchar(); exit(255);
523  }
524  vR.setSize(n);
525  double *ps=(*this), *pd=vR; // pointer source / destination
526  for (i=0; i<n; i++)
527 // pd[ii[i]]=*(ps++);
528  *(pd++)=ps[ii[i]];
529 }
int sz()
Definition: VectorInt.h:63
#define i
void setSize(int _n)
Definition: Vector.cpp:112
unsigned sz()
Definition: Vector.h:79
int * n

◆ prepareExtend()

void Vector::prepareExtend ( int  new_extention)

Definition at line 99 of file Vector.cpp.

100 {
101  if (d->extention<new_extention)
102  {
103  d->p=(double*)realloc(d->p,new_extention*sizeof(double));
104  if (d->p==NULL) { printf("memory allocation error\n"); getchar(); exit(253); }
105 
106  // not really necessary (fill with zero's):
107  memset(d->p+d->extention,0,(new_extention-d->extention)*sizeof(double));
108  d->extention=new_extention;
109  };
110 }
VectorData * d
Definition: Vector.h:50

◆ print()

void Vector::print ( )

Definition at line 161 of file Vector.cpp.

162 {
163  int N=sz();
164  printf("[");
165  if (!N || !d->p) { printf("]\n"); return; }
166 
167  double *up=d->p;
168  while (--N) printf("%f,",*(up++));
169  printf("%f]\n",*up);
170 }
unsigned sz()
Definition: Vector.h:79
VectorData * d
Definition: Vector.h:50

◆ save() [1/2]

void Vector::save ( char *  filename,
char  ascii 
)

Definition at line 441 of file Vector.cpp.

442 {
443  FILE *f;
444  if (ascii) f=fopen(filename,"w"); else f=fopen(filename,"wb");
445  if (f==NULL)
446  {
447  printf("Cannot write to '%s'\n",filename);
448  exit(255);
449  }
450  save(f,ascii);
451  fclose(f);
452 }
void save(char *filename, char ascii)
Definition: Vector.cpp:441
double * f

◆ save() [2/2]

void Vector::save ( FILE *  f,
char  ascii 
)

Definition at line 454 of file Vector.cpp.

455 {
456  char header[32]="CONDORVBv1.0";
457  if (ascii)
458  {
459  unsigned i;
460  double *pp=d->p;
461  if (ascii!=2) fprintf(f,"CONDORVAv1.0\n");
462  if (sz())
463  {
464  for (i=0; i<sz()-1; i++) fprintf(f,"%.16e\t",pp[i]);
465  fprintf(f,"%.16e\n",pp[i]);
466  }
467  return;
468  }
469  fwrite(header,sizeof(char),13,f);
470  fwrite(&d->n, sizeof(int),1, f);
471  fwrite(d->p, d->n*sizeof(double),1, f);
472 }
#define pp(s, x)
Definition: ml2d.cpp:473
#define i
unsigned sz()
Definition: Vector.h:79
double * f
VectorData * d
Definition: Vector.h:50
fprintf(glob_prnt.io, "\)

◆ scalarProduct()

double Vector::scalarProduct ( Vector  v)

Definition at line 332 of file Vector.cpp.

333 {
334  double *xp1=d->p, *xp2=v.d->p, sum=0;
335  int ni=sz();
336  while (ni--) { sum+=*(xp1++) * *(xp2++); };
337  return sum;
338 }
unsigned sz()
Definition: Vector.h:79
VectorData * d
Definition: Vector.h:50
int ni

◆ set()

void Vector::set ( double  dd)

Definition at line 482 of file Vector.cpp.

483 {
484  double *p=(*this);
485  if (!p) return;
486  int n=sz();
487  while (n--) *(p++)=dd;
488 }
unsigned sz()
Definition: Vector.h:79
int * n

◆ setExternalData()

void Vector::setExternalData ( int  _n,
double *  dd 
)

Definition at line 80 of file Vector.cpp.

81 {
82  if ((d->extention==_n)||(!d->extention))
83  {
84  d->n=_n; d->extention=_n; d->externalData=1; d->p=dd;
85  } else
86  {
87  printf("do not use this function ('setExternalData'): it's too dangerous.\n");
88  getchar(); exit(255);
89  }
90 }
VectorData * d
Definition: Vector.h:50

◆ setPart()

void Vector::setPart ( int  i,
Vector  v,
int  n = 0,
int  ii = 0 
)

Definition at line 475 of file Vector.cpp.

476 {
477  if (n==0) n=v.sz()-ii;
478  n=::mmin((int)n,(int)sz()-i);
479  memcpy(d->p+i, ((double*)v)+ii, n*sizeof(double));
480 }
#define i
double mmin()
Definition: Vector.cpp:340
unsigned sz()
Definition: Vector.h:79
VectorData * d
Definition: Vector.h:50
int * n

◆ setSize()

void Vector::setSize ( int  _n)

Definition at line 112 of file Vector.cpp.

113 {
114  d->n=_n;
115  if (_n==0) { if (d->p) free(d->p); d->p=NULL; d->extention=0; return; }
116  prepareExtend(_n);
117 }
void prepareExtend(int new_extention)
Definition: Vector.cpp:99
free((char *) ob)
VectorData * d
Definition: Vector.h:50

◆ shift()

void Vector::shift ( int  s)

Definition at line 490 of file Vector.cpp.

491 {
492  int n=sz();
493  if (!n) return;
494  double *ps=(*this), *pd=ps; // pointer source / destination
495  if (s==0) return;
496  if (s>0) { n-=s; pd+=s; }
497  else { n+=s; ps+=s; }
498  memmove(pd,ps,n*sizeof(double));
499 }
unsigned sz()
Definition: Vector.h:79
int * n

◆ square()

double Vector::square ( )

Definition at line 236 of file Vector.cpp.

237 {
238  double *xp=d->p, sum=0;
239  int ni=sz();
240  while (ni--) sum+=sqr(*(xp++));
241  return sum;
242 }
unsigned sz()
Definition: Vector.h:79
double sqr(const double &t)
Definition: tools.h:99
VectorData * d
Definition: Vector.h:50
int ni

◆ sz()

unsigned Vector::sz ( )
inline

Definition at line 79 of file Vector.h.

79 {return d->n;};
VectorData * d
Definition: Vector.h:50

◆ transposeAndMultiply()

void Vector::transposeAndMultiply ( Vector  vR,
Matrix  M 
)

Definition at line 297 of file Vector.cpp.

298 {
299  if ((int)sz()!=M.nLine())
300  {
301  printf("error in V^t * M.\n"); getchar(); exit(254);
302  }
303  int n=sz(), szr=M.nColumn(), i;
304  vR.setSize(szr);
305  double sum, *dv=(*this), **dm=M, *dd=vR;
306 
307  while (szr--)
308  {
309  sum=0.0;
310  i=n;
311  while (i--) sum+=dv[i]*dm[i][szr];
312  dd[szr]=sum;
313  }
314 }
int nColumn()
Definition: Matrix.h:84
#define i
void setSize(int _n)
Definition: Vector.cpp:112
unsigned sz()
Definition: Vector.h:79
int nLine()
Definition: Matrix.h:83
int * n

◆ zero()

void Vector::zero ( int  _i = 0,
int  _n = 0 
)

Definition at line 93 of file Vector.cpp.

94 {
95  if (_n==0) _n=d->n-i;
96  if (d->p) memset(d->p+i,0,_n*sizeof(double));
97 }
#define i
VectorData * d
Definition: Vector.h:50

Member Data Documentation

◆ d

VectorData* Vector::d = nullptr

Definition at line 50 of file Vector.h.

◆ emptyVector

Vector Vector::emptyVector
static

Definition at line 119 of file Vector.h.


The documentation for this class was generated from the following files: