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 
87  Array(void);
88 
94  Array(unsigned int Nlin,unsigned int Ncol);
95 
102  Array(unsigned int Nlin,unsigned int Ncol,Datum val);
103 
117  Array(const Pds::Size &S);
118 
134 
149  Array(const std::vector<Datum> &b);
150 
165  Array(const Pds::Matrix &B);
166 
167  ~Array();
168 
173 public:
174 
202 
215  bool Copy(const Pds::Array<Datum> &B);
216 
221 public:
222 
234  bool IsEmpty(void) const;
235 
244  bool IsNotSimilarTo(const Pds::Array<Datum> &B) const;
245 
254  bool IsNotSimilarTo(const Pds::Matrix &B) const;
255 
256 
261 public:
262 
277  bool FillRandC(double p1);
278 
290  bool FillRandI(unsigned int min,unsigned int max);
291 
296 public:
297 
307  Datum Sum(void) const;
308 
313 public:
314 
324  unsigned int Nlin(void) const;
325 
330  unsigned int Ncol(void) const;
331 
336  unsigned int Nel(void) const;
337 
342  Pds::Size Size(void) const;
343 
344 
349 public:
350 
363  Datum Get(unsigned int lin,unsigned int col) const;
364 
374  bool Set(unsigned int lin,unsigned int col,Datum val);
375 
383  Datum Get(unsigned int id) const;
384 
393  const Datum &GetRaw(unsigned int lin,unsigned int col) const
394  {
395  return this->array[lin][col];
396  }
397 
398 
407  void SetRaw(unsigned int lin,unsigned int col,const Datum &val)
408  {
409  this->array[lin][col]=val;
410  }
411 
420  Datum &At(unsigned int lin,unsigned int col);
421 
429  Datum &At(unsigned int id);
434 public:
435 
452  Pds::Vector HistogramNorm(const Pds::RegionRect &R,unsigned int min,unsigned int max) const;
453 
464  Pds::Vector HistogramNorm(unsigned int min=0,unsigned int max=255) const;
465 
466 
472 
478 public:
479 
502 
520 
521 
537  Pds::Array<Datum> Resize(double factor) const;
538 
544 public:
545 
564  static std::vector<Pds::Array<Datum>> ImportBmpFile(const std::string &bmpfilepath);
565 
575  static Pds::Array<Datum> MeanBlock( const std::vector<Pds::Array<Datum>> &Block);
581 public:
582 
594  static Datum** ArrayAllocate(const Pds::Matrix &A);
595 
603  static Datum** ArrayAllocate(const Pds::Array<Datum> &A);
604 
605 
615  static Datum** ArrayAllocate(unsigned int Nlin,unsigned int Ncol,Datum val);
616 
624  static Datum** ArrayAllocate(unsigned int Nlin,unsigned int Ncol);
625 
632  static void ArrayRelease(Datum** &array,unsigned int Nlin);
633 
643  static Datum** ArrayReshape(const Pds::Array<Datum> &A,unsigned int Nlin,unsigned int Ncol);
644 
653  static Datum *ArrayToLineArray(Datum **array,unsigned int Nlin,unsigned int Ncol);
654 
662  static std::string ArrayToString(Datum **array,unsigned int Nlin,unsigned int Ncol);
663 
671  static Datum **ArrayFromString(const std::string &str,unsigned int &Nlin,unsigned int &Ncol);
672 
681  static Datum **ArrayColFromString(const std::string &str,unsigned int &Nlin,unsigned int &Ncol);
682 
688 public:
689 
705  bool ExportBmpFile(const unsigned char colormap[256][3],const std::string &filepath) const;
706 
715  bool ExportBmpFile(const Pds::Array<unsigned char> &Colormap,const std::string &filepath) const;
721 public:
722 
742  static bool ArrayWriteBmpWithColormap( Datum **array,
743  unsigned int Nlin,
744  unsigned int Ncol,
745  const unsigned char colormap[256][3],
746  const std::string &bmpfilepath);
747 
748 
762  static bool ArrayWriteBmpWithColormap( Datum **array,
763  unsigned int Nlin,
764  unsigned int Ncol,
765  const Pds::Array<unsigned char> &Colormap,
766  const std::string &bmpfilepath);
767 
779  static bool ArrayWriteBmp( Datum **arrayr,
780  Datum **arrayg,
781  Datum **arrayb,
782  unsigned int Nlin,
783  unsigned int Ncol,
784  const std::string &bmpfilepath);
785 
786 
797  static bool ArrayWriteCsvFile(const std::string &filepath,Datum **array,unsigned int Nlin,unsigned int Ncol,char delimitador=',');
798 
799 
811  static bool ArrayWriteCsvFile(const std::string &filepath,std::vector<std::string> titles,Datum **array,unsigned int Nlin,unsigned int Ncol,char delimitador=',');
812 
813 
836  static bool ArrayWriteMatFile(FILE *fp,const char *pname,Datum **array,unsigned int Nlin,unsigned int Ncol);
837 
861  static bool ArrayWriteMatFile(FILE *fp,const char *pname,Datum **arrayr,Datum **arrayi,unsigned int Nlin,unsigned int Ncol);
862 
871  static bool ArraySaveInStream(std::ofstream &myfile,Datum **array,unsigned int Nlin,unsigned int Ncol);
872 
882  static Datum** ArrayLoadFromStream(std::ifstream &ifs,unsigned int Nlin,unsigned int Ncol);
883 
894  static Datum** ArrayLoadLineFromStream(std::ifstream &ifs,unsigned int &Nlin,unsigned int &Ncol);
895 
904  static bool ArraySave(const std::string &filepath,Datum **array,unsigned int Nlin,unsigned int Ncol);
905 
915  static Datum** ArrayLoad(const std::string &filepath,unsigned int& Nlin,unsigned int& Ncol);
916 
929  static Datum** ArrayColLoad(const std::string &filepath,unsigned int& Nlin,unsigned int& Ncol);
930 
931 
932 
937 public:
938 
951  void MakeEmpty(void);
952 
957  void Print(std::string str) const;
958 
962  void Print(void) const;
963 
964 
972  bool Reshape(unsigned int Nlin,unsigned int Ncol);
973 
974 
983  Pds::Matrix Centroids(const std::vector<Pds::Matrix> &Block) const;
984 
998 }; // Class Array
999 
1000 
1001 } // namespace Pds
1002 
1003 
1004 
1009 #endif
1010 
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...
static Datum ** ArrayLoadLineFromStream(std::ifstream &ifs, unsigned int &Nlin, unsigned int &Ncol)
Lee un arreglo de Nlin=1 lineas y Ncol columnas desde una linea de um archivo. Se entiende que una li...
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.
static bool ArrayWriteCsvFile(const std::string &filepath, std::vector< std::string > titles, 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 ...
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:407
Pds::Vector HistogramNorm(const Pds::RegionRect &R, unsigned int min, unsigned int max) const
Retorna un vector con el histograma desde min hasta max (valores enteros). Elementos con valores meno...
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:393
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 ...
Pds::Vector HistogramNorm(unsigned int min=0, unsigned int max=255) const
Retorna un vector con el histograma desde min hasta max (valores enteros). Elementos con valores meno...
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:47

Enlaces de interés

HomePage Bazaar Download Bug report Ayuda Developer Feed