Home | Develop | Download | Contact
Array.hpp
1 /*
2  * Array.hpp
3  *
4  * Copyright 2018 Fernando Pujaico Rivera <fernando.pujaico.rivera@gmail.com>
5  *
6  * This program is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License as published by
8  * the Free Software Foundation; either version 2 of the License, or
9  * (at your option) any later version.
10  *
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with this program; if not, write to the Free Software
18  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
19  * MA 02110-1301, USA.
20  *
21  */
22 
32 #ifndef __PDS_ARRAY_HPP__
33 #define __PDS_ARRAY_HPP__
34 
35 
46 #include <string>
47 #include <Pds/Size>
48 #include <Pds/RegionRect>
49 #include <vector>
50 
51 #include <iostream>
52 #include <fstream>
53 
54 namespace Pds{
55 
56 class Matrix;
57 class Vector;
58 
66 template <typename Datum>
67 class Array
68 {
69 public:
71  Datum **array;
73  unsigned int nlin;
75  unsigned int ncol;
76 
77 public:
78 
88  Array(void);
89 
95  Array(unsigned int Nlin,unsigned int Ncol);
96 
103  Array(unsigned int Nlin,unsigned int Ncol,Datum val);
104 
118  Array(const Pds::Size &S);
119 
135 
150  Array(const std::vector<Datum> &b);
151 
166  Array(const Pds::Matrix &B);
167 
168  ~Array();
169 
174 public:
175 
203 
216  bool Copy(const Pds::Array<Datum> &B);
217 
222 public:
223 
235  bool IsEmpty(void) const;
236 
245  bool IsNotSimilarTo(const Pds::Array<Datum> &B) const;
246 
255  bool IsNotSimilarTo(const Pds::Matrix &B) const;
256 
257 
262 public:
263 
278  bool FillRandC(double p1);
279 
291  bool FillRandI(unsigned int min,unsigned int max);
292 
297 public:
298 
308  Datum Sum(void) const;
309 
314 public:
315 
325  unsigned int Nlin(void) const;
326 
331  unsigned int Ncol(void) const;
332 
337  unsigned int Nel(void) const;
338 
343  Pds::Size Size(void) const;
344 
345 
350 public:
351 
364  Datum Get(unsigned int lin,unsigned int col) const;
365 
375  bool Set(unsigned int lin,unsigned int col,Datum val);
376 
384  Datum Get(unsigned int id) const;
385 
394  const Datum &GetRaw(unsigned int lin,unsigned int col) const
395  {
396  return this->array[lin][col];
397  }
398 
399 
409  void SetRaw(unsigned int lin,unsigned int col,const Datum &val)
410  {
411  this->array[lin][col]=val;
412  }
413 
422  Datum &At(unsigned int lin,unsigned int col);
423 
431  Datum &At(unsigned int id);
436 public:
437 
450  Pds::Vector HistogramNorm(const Pds::RegionRect &R,unsigned int min,unsigned int max) const;
451 
452 
458 
464 public:
465 
488 
506 
507 
523  Pds::Array<Datum> Resize(double factor) const;
524 
530 public:
531 
550  static std::vector<Pds::Array<Datum>> ImportBmpFile(const std::string &bmpfilepath);
551 
561  static Pds::Array<Datum> MeanBlock( const std::vector<Pds::Array<Datum>> &Block);
567 public:
568 
580  static Datum** ArrayAllocate(const Pds::Matrix &A);
581 
589  static Datum** ArrayAllocate(const Pds::Array<Datum> &A);
590 
591 
601  static Datum** ArrayAllocate(unsigned int Nlin,unsigned int Ncol,Datum val);
602 
610  static Datum** ArrayAllocate(unsigned int Nlin,unsigned int Ncol);
611 
618  static void ArrayRelease(Datum** &array,unsigned int Nlin);
619 
629  static Datum** ArrayReshape(const Pds::Array<Datum> &A,unsigned int Nlin,unsigned int Ncol);
630 
639  static Datum *ArrayToLineArray(Datum **array,unsigned int Nlin,unsigned int Ncol);
640 
648  static std::string ArrayToString(Datum **array,unsigned int Nlin,unsigned int Ncol);
649 
657  static Datum **ArrayFromString(const std::string &str,unsigned int &Nlin,unsigned int &Ncol);
658 
667  static Datum **ArrayColFromString(const std::string &str,unsigned int &Nlin,unsigned int &Ncol);
668 
674 public:
675 
691  bool ExportBmpFile(const unsigned char colormap[256][3],const std::string &filepath) const;
692 
701  bool ExportBmpFile(const Pds::Array<unsigned char> &Colormap,const std::string &filepath) const;
707 public:
708 
728  static bool ArrayWriteBmpWithColormap( Datum **array,
729  unsigned int Nlin,
730  unsigned int Ncol,
731  const unsigned char colormap[256][3],
732  const std::string &bmpfilepath);
733 
734 
748  static bool ArrayWriteBmpWithColormap( Datum **array,
749  unsigned int Nlin,
750  unsigned int Ncol,
751  const Pds::Array<unsigned char> &Colormap,
752  const std::string &bmpfilepath);
753 
765  static bool ArrayWriteBmp( Datum **arrayr,
766  Datum **arrayg,
767  Datum **arrayb,
768  unsigned int Nlin,
769  unsigned int Ncol,
770  const std::string &bmpfilepath);
771 
772 
783  static bool ArrayWriteCsvFile(const std::string &filepath,Datum **array,unsigned int Nlin,unsigned int Ncol,char delimitador=',');
784 
807  static bool ArrayWriteMatFile(FILE *fp,const char *pname,Datum **array,unsigned int Nlin,unsigned int Ncol);
808 
832  static bool ArrayWriteMatFile(FILE *fp,const char *pname,Datum **arrayr,Datum **arrayi,unsigned int Nlin,unsigned int Ncol);
833 
842  static bool ArraySaveInStream(std::ofstream &myfile,Datum **array,unsigned int Nlin,unsigned int Ncol);
843 
853  static Datum** ArrayLoadFromStream(std::ifstream &ifs,unsigned int Nlin,unsigned int Ncol);
854 
863  static bool ArraySave(const std::string &filepath,Datum **array,unsigned int Nlin,unsigned int Ncol);
864 
874  static Datum** ArrayLoad(const std::string &filepath,unsigned int& Nlin,unsigned int& Ncol);
875 
888  static Datum** ArrayColLoad(const std::string &filepath,unsigned int& Nlin,unsigned int& Ncol);
889 
890 
891 
896 public:
897 
910  void MakeEmpty(void);
911 
916  void Print(std::string str) const;
917 
921  void Print(void) const;
922 
923 
931  bool Reshape(unsigned int Nlin,unsigned int Ncol);
932 
933 
942  Pds::Matrix Centroids(const std::vector<Pds::Matrix> &Block) const;
943 
957 }; // Class Array
958 
959 
960 } // namespace Pds
961 
962 
963 
968 #endif
969 
La clase tipo Array . Esta clase genera una agrupación de 2 datos. Para usar incluir Pds/Array.
Definition: Array.hpp:68
Datum ** array
Definition: Array.hpp:71
unsigned int ncol
Definition: Array.hpp:75
unsigned int nlin
Definition: Array.hpp:73
La clase tipo Pds::Matrix . Esta clase genera una matriz de Nlin lineas y Ncol columnas....
Definition: Matrix.hpp:86
La estructura tipo Pds::RegionRect . Esta estructura genera una region. Para usar incluir <Pds/Region...
Definition: RegionRect.hpp:64
La clase tipo Pds::Size . Esta clase genera un objeto con dos parametros Nlin y Ncol....
Definition: Size.hpp:58
La clase tipo Pds::Vector . Esta clase genera una matriz de Nlin lineas y 1 columna....
Definition: Vector.hpp:78
bool IsNotSimilarTo(const Pds::Matrix &B) const
Verifica si las matrices son similares en tamaño.
Array(void)
Crea un objeto de tipo Pds::Array.
static Datum ** ArrayLoad(const std::string &filepath, unsigned int &Nlin, unsigned int &Ncol)
Lee de un archivo un arreglo de Nlin lineas y Ncol columnas (arreglo de arreglos).
Array(const Pds::Matrix &B)
Crea un objeto de tipo Pds::Array copiando datos desde un Pds::Matrix.
Array(const Pds::Size &S)
Crea un objeto de tipo Pds::Array con elementos inicializados con cero.
Pds::Array< Datum > FilterMean3(void) const
Procesa la matriz A usando un filtro mean de radio 1.
bool IsNotSimilarTo(const Pds::Array< Datum > &B) const
Verifica si las matrices son similares en tamaño.
void Print(void) const
Imprime en pantalla el contenido del array.
static Datum ** ArrayColFromString(const std::string &str, unsigned int &Nlin, unsigned int &Ncol)
Convierte un sdt::string con arreglo de Nlin lineas y 1 columna a un arreglo.
bool Set(unsigned int lin, unsigned int col, Datum val)
Establece una variable Datum en la posición (lin,col) de la array. Hace una verificación para evitar ...
static bool ArrayWriteCsvFile(const std::string &filepath, Datum **array, unsigned int Nlin, unsigned int Ncol, char delimitador=',')
Salva en un archivo de texto un arreglo de Nlin lineas y Ncol columnas, usando el formato Csv (Comma ...
bool FillRandI(unsigned int min, unsigned int max)
Inicializa la array con números enteros desde min a max.
bool Reshape(unsigned int Nlin, unsigned int Ncol)
Remodela los datos internos de la array y la convierte en una array de tamaño diferente,...
static bool ArrayWriteBmpWithColormap(Datum **array, unsigned int Nlin, unsigned int Ncol, const unsigned char colormap[256][3], const std::string &bmpfilepath)
Escribe los datos de una matriz en un archivo de en formato BMP.
void Print(std::string str) const
Imprime en pantalla el contenido del array.
static Datum * ArrayToLineArray(Datum **array, unsigned int Nlin, unsigned int Ncol)
Convierte a un arreglo unidimensional un arreglo de Nlin lineas y Ncol columnas (arreglo de arreglos)...
Array(const Pds::Array< Datum > &B)
Crea un objeto de tipo Pds::Array copiando datos desde otra array. Este es un Copy assignment constru...
Pds::Matrix Centroids(const std::vector< Pds::Matrix > &Block) const
calcula los centroides de las muestras en el bloque Block. EL bloque Block tiene L muestras de N elem...
unsigned int Ncol(void) const
Retorna el numero de columnas de la array.
void MakeEmpty(void)
libera los datos internos de la array y la convierte en una array nula. es decir con lineas y columna...
static bool ArrayWriteBmp(Datum **arrayr, Datum **arrayg, Datum **arrayb, unsigned int Nlin, unsigned int Ncol, const std::string &bmpfilepath)
Escribe los datos de una matriz en un archivo de en formato BMP.
static Datum ** ArrayColLoad(const std::string &filepath, unsigned int &Nlin, unsigned int &Ncol)
Lee de un archivo un arreglo de Nlin lineas y Ncol=1 columna (arreglo de arreglos).
static Datum ** ArrayAllocate(unsigned int Nlin, unsigned int Ncol)
crea dinámicamente un arreglo de Nlin lineas y Ncol columnas
static Datum ** ArrayAllocate(const Pds::Matrix &A)
crea dinámicamente un arreglo de A.Nlin() lineas y A.Ncol() columnas, con los datos copiados de una m...
unsigned int Nlin(void) const
Retorna el numero de lineas de la array.
Array(unsigned int Nlin, unsigned int Ncol, Datum val)
Crea un objeto de tipo Pds::Array.
static void ArrayRelease(Datum **&array, unsigned int Nlin)
Libera un arreglo de Nlin lineas y Ncol columnas (arreglo de arreglos) Adicionalmente carga con NULL ...
bool IsEmpty(void) const
Verifica si la array es nula es decir con lineas o columnas cero o arreglo NULL.
static Pds::Array< Datum > MeanBlock(const std::vector< Pds::Array< Datum >> &Block)
Calcula A,la matriz media de un conjunto de N matrizes agrupadas en un std::vector.
static std::string ArrayToString(Datum **array, unsigned int Nlin, unsigned int Ncol)
Convierte a un sdt::string un arreglo de Nlin lineas y Ncol columnas (arreglo de arreglos).
Pds::Array< Datum > & operator=(const Pds::Array< Datum > &B)
Copia en si mismo (A), una array B. Este operador es similar al método Copy(). No importa el tamaño d...
static bool ArraySaveInStream(std::ofstream &myfile, Datum **array, unsigned int Nlin, unsigned int Ncol)
Salva en un archivo un arreglo de Nlin lineas y Ncol columnas (arreglo de arreglos).
void SetRaw(unsigned int lin, unsigned int col, const Datum &val)
Establece una variable Datum en la posición (lin,col) de la array.
Definition: Array.hpp:409
Pds::Vector HistogramNorm(const Pds::RegionRect &R, unsigned int min, unsigned int max) const
Retorna un vector con el histograma.
static Datum ** ArrayFromString(const std::string &str, unsigned int &Nlin, unsigned int &Ncol)
Convierte un sdt::string con arreglo de Nlin lineas y Ncol columnas a un arreglo.
const Datum & GetRaw(unsigned int lin, unsigned int col) const
Retorna una variable Datum en la posición (lin,col) de la array.
Definition: Array.hpp:394
Datum Get(unsigned int lin, unsigned int col) const
Retorna una variable Datum en la posición (lin,col) de la array. Hace una verificación para evitar le...
Array(const std::vector< Datum > &b)
Crea un objeto de tipo Pds::Array copiando datos desde std::vector.
Datum Sum(void) const
Retorna la suma de todos los elementos del array.
bool ExportBmpFile(const Pds::Array< unsigned char > &Colormap, const std::string &filepath) const
Escribe en una matriz en un archivo binario en formato BMP. Losdatos deben ir de 0 a 255,...
static Datum ** ArrayAllocate(unsigned int Nlin, unsigned int Ncol, Datum val)
crea dinámicamente un arreglo de Nlin lineas y Ncol columnas, con elementos inicializado con un valor...
bool FillRandC(double p1)
Inicializa la array con números con unos y ceros con una probabilidad de 1 igual a p1.
Datum Get(unsigned int id) const
Retorna una variable Datum en la posición (id) de la array. Hace una verificación para evitar leer fu...
Pds::Array< Datum > FilterMean3b(void) const
Procesa la matriz A usando un filtro mean de radio 1.
bool ExportBmpFile(const unsigned char colormap[256][3], const std::string &filepath) const
Escribe en una matriz en un archivo binario en formato BMP. Losdatos deben ir de 0 a 255,...
Datum & At(unsigned int lin, unsigned int col)
Retorna una variable Datum en la posición (lin,col) de la array. Hace una verificación para evitar le...
Array(unsigned int Nlin, unsigned int Ncol)
Crea un objeto de tipo Pds::Array.
bool Copy(const Pds::Array< Datum > &B)
Copia en si mismo (A), el contenido de una array B. Este método es similar a usar el operador = ....
static std::vector< Pds::Array< Datum > > ImportBmpFile(const std::string &bmpfilepath)
Lee matrices de un archivo binario en formato BMP.
Pds::Matrix Centroids(const Pds::Matrix &X) const
calcula los centroides de las muestras en X. La matriz tiene L muestras (lineas) de N elementos (colu...
unsigned int Nel(void) const
Retorna el numero de elementos de la array (Nlin x Ncol).
Pds::Array< Datum > Resize(double factor) const
Retorna una matriz B (size: NlinB,NcolB) resultado de aplicar un subsampling de la matriz A (size: Nl...
static Datum ** ArrayLoadFromStream(std::ifstream &ifs, unsigned int Nlin, unsigned int Ncol)
Lee de un archivo un arreglo de Nlin lineas y Ncol columnas (arreglo de arreglos).
static bool ArraySave(const std::string &filepath, Datum **array, unsigned int Nlin, unsigned int Ncol)
Salva en un archivo un arreglo de Nlin lineas y Ncol columnas (arreglo de arreglos).
Pds::RegionRect GetRegion(void) const
Retorna una variable Pds::RegionRect desde la posicion (0,0), con ancho y alto (Mat....
Pds::Size Size(void) const
Retorna un objeto de tipo Pds::Size con el numero de lineas y columans.
static Datum ** ArrayAllocate(const Pds::Array< Datum > &A)
crea dinámicamente un arreglo de A.Nlin() lineas y A.Ncol() columnas, con los datos copiados de una m...
static bool ArrayWriteMatFile(FILE *fp, const char *pname, Datum **arrayr, Datum **arrayi, unsigned int Nlin, unsigned int Ncol)
Escribe en un archivo binario en formato de octave un arreglo de Nlin lineas y Ncol columnas (arreglo...
static Datum ** ArrayReshape(const Pds::Array< Datum > &A, unsigned int Nlin, unsigned int Ncol)
crea dinámicamente un arreglo de Nlin lineas y Ncol columnas, con los datos copiados de una matriz A ...
Datum & At(unsigned int id)
Retorna una variable Datum en la posición (id) de la array. Hace una verificación para evitar leer o ...
static bool ArrayWriteMatFile(FILE *fp, const char *pname, Datum **array, unsigned int Nlin, unsigned int Ncol)
Escribe en un archivo binario en formato de octave un arreglo de Nlin lineas y Ncol columnas (arreglo...
static bool ArrayWriteBmpWithColormap(Datum **array, unsigned int Nlin, unsigned int Ncol, const Pds::Array< unsigned char > &Colormap, const std::string &bmpfilepath)
Escribe los datos de una matriz en un archivo de en formato BMP.
Nombre de espacion para PDS (Procesamiento Digital de Senales)
Definition: RaFile.hpp:46

Enlaces de interés

HomePage Bazaar Download Bug report Ayuda Developer Feed