This vignette is adapted from the official Armadillo documentation.
Armadillo provides functions to save and load matrices and cubes to and from files. The following file types are supported:
arma_binary
: Numerical data stored in machine dependent binary format, with a simple header to speed up loading. The header indicates the type and size of matrix/cube.arma_ascii
: Numerical data stored in human readable text format, with a simple header to speed up loading. The header indicates the type and size of matrix/cube.raw_binary
: Numerical data stored in machine dependent raw binary format, without a header. Matrices are loaded to have one column, while cubes are loaded to have one slice with one column. The .reshape()
function can be used to alter the size of the loaded matrix/cube without losing data.raw_ascii
: Numerical data stored in raw ASCII format, without a header. The numbers are separated by whitespace. The number of columns must be the same in each row. Cubes are loaded as one slice. Data which was saved in Matlab/Octave using the -ascii
option can be read in Armadillo, except for complex numbers. Complex numbers are stored in standard C++ notation, which is a tuple surrounded by brackets: eg. (1.23,4.56)
indicates 1.24 + 4.56i.csv_ascii
: Numerical data stored in comma separated value (CSV) text format, without a header. To save/load with a header, use the csv_name(filename, header)
specification instead. Handles complex numbers stored in the compound form of 1.24+4.56i
. Applicable to Mat
and SpMat
.coord_ascii
: Numerical data stored as a text file in coordinate list format, without a header. Only non-zero values are stored. For real matrices, each line contains information in the following format: row column value
. For complex matrices, each line contains information in the following format: row column real_value imag_value
. The rows and columns start at zero. Applicable to Mat
and SpMat
.pgm_binary
: Image data stored in Portable Gray Map (PGM) format. Applicable to Mat
only. Saving int, float or double matrices is a lossy operation, as each element is copied and converted to an 8 bit representation. As such the matrix should have values in the [0,255]
interval, otherwise the resulting image may not display correctly.ppm_binary
: Image data stored in Portable Pixel Map (PPM) format. Applicable to Cube
only. Saving int, float or double matrices is a lossy operation, as each element is copied and converted to an 8 bit representation. As such the cube/field should have values in the [0,255]
interval, otherwise the resulting image may not display correctly.hdf5_binary
: Numerical data stored in portable HDF5 binary format. For saving, the default dataset name within the HDF5 file is "dataset"
. For loading, the order of operations is: (1) try loading a dataset named "dataset"
, (2) try loading a dataset named "value"
, (3) try loading the first available dataset. To explicitly control the dataset name, specify it via the hdf5_name(filename, dataset)
argument. HDF5 support can be enabled by defining ARMA_USE_HDF5
before including the Armadillo header.The following file types are supported for fields:
arma_binary
: See above.ppm_binary
: See above.Usage:
.save(filename)
.load(filename)
file_type)
.save(filename, file_type)
.load(filename,
.save(stream)
.load(stream)
file_type)
.save(stream, file_type)
.load(stream,
.save(hdf5_name(filename, dataset))
.load(hdf5_name(filename, dataset))
.save(hdf5_name(filename, dataset, settings))
.load(hdf5_name(filename, dataset, settings))
.save(csv_name(filename, header))
.load(csv_name(filename, header))
.save(csv_name(filename, header, settings)) .load(csv_name(filename, header, settings))
By providing either hdf5_name(filename, dataset)
or hdf5_name(filename, dataset, settings)
, the file_type
type is assumed to be hdf5_binary
. The dataset
argument specifies an HDF5 dataset name (eg. "my_dataset"
) that can include a full path (eg. "/group_name/my_dataset"
); if a blank dataset name is specified (ie. ""
), it is assumed to be "dataset"
. The settings
argument is optional; it is one of the following, or a combination thereof
hdf5_opts::trans
: Save/load the data with columns transposed to rows (and vice versa).hdf5_opts::append
: Instead of overwriting the file, append the specified dataset to the file; the specified dataset must not already exist in the file.hdf5_opts::replace
: Instead of overwriting the file, replace the specified dataset in the file.+
operator (e.g., hdf5_opts::trans + hdf5_opts::append
)By providing either csv_name(filename, header)
or csv_name(filename, header, settings)
, the file is assumed to have data in comma separated value (CSV) text format. The header
argument specifies the object which stores the separate elements of the header line; it must have the type field<std::string>
. The optional settings
argument is one of the following, or a combination thereof
csv_opts::trans
: Save/load the data with columns transposed to rows (and vice versa).csv_opts::no_header
: Assume there is no header line; the header argument is not referenced.csv_opts::semicolon
: Use semicolon (;
) instead of comma (,
) as the separator character.csv_opts::strict
: Interpret missing values as NaN
(not applicable to sparse matrices).+
operator (e.g., csv_opts::trans + csv_opts::no_header
)hdf5.h
header file must be available on your system and you will need to link with the HDF5 library (eg. -lhdf5
). HDF5 support can be enabled by defining ARMA_USE_HDF5
before including the Armadillo header.saveRDS()
and readRDS()
.Save and load matrices:
cpp11::register]] int saveload1_(const int& n) {
[[
arma::mat A(n, n, fill::randu);
// default save format is arma_binary
"A.bin");
A.save(
// save in raw_ascii format
"A.txt", arma::raw_ascii);
A.save(
// save in CSV format without a header
"A.csv", arma::csv_ascii);
A.save(
// save in CSV format with a header
std::string> header(A.n_cols);
arma::field<0) = "foo";
header(1) = "bar"; // etc
header("A.csv", header));
A.save(arma::csv_name(
// save in HDF5 format with internal dataset named as "my_data"
// see the caveats
// A.save(arma::hdf5_name("A.h5", "my_data"));
// automatically detect format type while loading
arma::mat B;"A.bin");
B.load(
// force loading in arma_ascii format
arma::mat C;"A.txt", arma::arma_ascii);
C.load(
// example of testing for success
arma::mat D;bool ok = D.load("A.bin");
if(ok == true) {
"Matrix loaded successfully");
message(else {
} "Problem with loading");
stop(
}
return 0;
}
Save and load fields:
cpp11::register]] int saveload2_(const int& n) {
[[
arma::field<arma::mat> F(n);
for (int i = 0; i < n; i++) {
F(i) = arma::mat(n, n, fill::randu);
}
// default save format is arma_binary
"F.bin");
F.save(
// save in PPM format
"F.ppm", arma::ppm_binary);
F.save(
// automatically detect format type while loading
arma::field<arma::mat> G;"F.bin");
G.load(
return 0;
}