This tutorial shows how to export and import data from Concepts to files in Matlab's binary format.
-
Commented Program
-
Preparations
-
Export data from Concepts to a matfile
-
Import data to Concepts from a matfile
-
Complete Source Code
Commented Program
Include files for input/output handling and matrices.
#include "matfile.hh"
#include "operator.hh"
Preparations
In the first lines two matrices are initialized.
for(uint i=0; i<matrix1.dimX(); ++i){
for(uint j=0; j<matrix1.dimY(); ++j){
matrix1(i,j) = std::complex<double>(std::rand(),std::rand());
}
}
for(uint i=0;i<
std::min(matrix2.dimX(),matrix2.dimY());++i)
matrix2(i,i) = std::rand();
F min(const concepts::Array< F > &a)
Returns the minimal value in array a.
Export data from Concepts to a matfile
Now we want to write these two matrices into a binary Matlab file. First, we create a concepts::MatfileIO
with the designated filename as string input.
Then we use the method add
to add data to the created matfile
mo.add(matrix1,"Matrix1");
mo.add(matrix2,"Matrix2");
where we specify the variable name of the data. Finally, we close the matfile.
Import data to Concepts from a matfile
Now we want to (re-)import the matrices from the matfile. We open the matfile
and check the properties of the variable Matrix1
.
std::cout << "exists(Matrix1): " << mi.exists("Matrix1") << std::endl;
std::cout << "isScalar(Matrix1): " << mi.isScalar("Matrix1") << std::endl;
std::cout << "isDense(Matrix1): " << mi.isDense("Matrix1") << std::endl;
std::cout << "isSparse(Matrix1): " << mi.isSparse("Matrix1") << std::endl;
std::cout << "isUint(Matrix1): " << mi.isUint("Matrix1") << std::endl;
std::cout << "isInt(Matrix1): " << mi.isInt("Matrix1") << std::endl;
std::cout << "isReal(Matrix1): " << mi.isReal("Matrix1") << std::endl;
std::cout << "isCmplx(Matrix1): " << mi.isCmplx("Matrix1") << std::endl;
We read the two matrices from the matfile making sure that they exist and have the correct properties.
if ((mi.exists("Matrix1")) && (mi.isDense("Matrix1")) && (mi.isCmplx("Matrix1")))
mi.get(matrix1_input,"Matrix1");
if ((mi.exists("Matrix2")) && (mi.isSparse("Matrix2")) && (mi.isReal("Matrix2")))
mi.get(matrix2_input,"Matrix2");
We close the matfile.
Finally, we print the exported and imported matrices on the screen.
std::cout << std::endl << "Matrix1 (exported) = " << matrix1 << std::endl;
std::cout << std::endl << "Matrix1 (imported) = " << matrix1_input << std::endl;
std::cout << std::endl << "Matrix2 (exported) = " << matrix2 << std::endl;
std::cout << std::endl << "Matrix2 (imported) = " << matrix2_input << std::endl;
Complete Source Code
- Author
- Dirk Klindworth 2014
#include "matfile.hh"
#include "operator.hh"
int main(int argc, char** argv) {
try {
for(uint i=0; i<matrix1.
dimX(); ++i){
for(uint j=0; j<matrix1.
dimY(); ++j){
matrix1(i,j) = std::complex<double>(std::rand(),std::rand());
}
}
for(uint i=0;i<std::min(matrix2.
dimX(),matrix2.
dimY());++i)
matrix2(i,i) = std::rand();
mo.
add(matrix1,
"Matrix1");
mo.
add(matrix2,
"Matrix2");
std::cout <<
"exists(Matrix1): " << mi.
exists(
"Matrix1") << std::endl;
std::cout <<
"isScalar(Matrix1): " << mi.
isScalar(
"Matrix1") << std::endl;
std::cout <<
"isDense(Matrix1): " << mi.
isDense(
"Matrix1") << std::endl;
std::cout <<
"isSparse(Matrix1): " << mi.
isSparse(
"Matrix1") << std::endl;
std::cout <<
"isUint(Matrix1): " << mi.
isUint(
"Matrix1") << std::endl;
std::cout <<
"isInt(Matrix1): " << mi.
isInt(
"Matrix1") << std::endl;
std::cout <<
"isReal(Matrix1): " << mi.
isReal(
"Matrix1") << std::endl;
std::cout <<
"isCmplx(Matrix1): " << mi.
isCmplx(
"Matrix1") << std::endl;
mi.
get(matrix1_input,
"Matrix1");
mi.
get(matrix2_input,
"Matrix2");
std::cout << std::endl << "Matrix1 (exported) = " << matrix1 << std::endl;
std::cout << std::endl << "Matrix1 (imported) = " << matrix1_input << std::endl;
std::cout << std::endl << "Matrix2 (exported) = " << matrix2 << std::endl;
std::cout << std::endl << "Matrix2 (imported) = " << matrix2_input << std::endl;
}
std::cout << e << std::endl;
return 1;
}
}
bool exists(const std::string &varName) const
bool isCmplx(const std::string &varName) const
bool isDense(const std::string &varName) const
void get(T &u, const std::string varName)
void add(const T &u, const std::string varName, enum matio_compression compress=MAT_COMPRESSION_NONE)
bool isReal(const std::string &varName) const
bool isUint(const std::string &varName) const
bool isSparse(const std::string &varName) const
bool isScalar(const std::string &varName) const
bool isInt(const std::string &varName) const
virtual const uint dimY() const
virtual const uint dimX() const
std::complex< Real > Cmplx
Type for a complex number. It also depends on the setting of Real.