libnpy is a simple C++ library for reading and writing of numpy's .npy files.
Refer to format.py for a detailed description of the .npy format.
This libraries primary purpose is writing numerical data easily and efficiently into the .npy format. It also allows reading .npy files, although only a very limited subset of data types are supported.
- Writing C++ vectors (std::vector) to .npy files
- Reading (some) simple .npy files into C++ vectors
Only scalar numeric data types are supported. There is no natural way to represent more complex objects and parsing the header becomes tremendously more complex. Supported types:
- unsigned integer
- signed integer
- floating point
- complex floating point (std::complex, ...)
libnpy is a header only library. You only need to download npy.hpp
into your include path. Neither special compiler flags nor a specific build system are required.
Optional: If you use meson, you can use the provided meson.build
file to declare the dependency on libnpy.
Reading data:
#include "npy.hpp"
#include <vector>
#include <string>
int main() {
std::vector<unsigned long> shape {};
bool fortran_order;
std::vector<double> data;
const std::string path {"data.npy"};
npy::LoadArrayFromNumpy(path, shape, fortran_order, data);
}
Writing data:
#include "npy.hpp"
#include <vector>
#include <string>
int main() {
const std::vector<long unsigned> shape{2, 3};
const bool fortran_order{false};
const std::string path{"out.npy"};
const std::vector<double> data1{1, 2, 3, 4, 5, 6};
npy::SaveArrayAsNumpy(path, fortran_order, shape.size(), shape.data(), data1);
}
See test/
for further examples.
C++11 is required. If you use g++, use -std=c++11
.
The tests can be build with meson>=0.55
and depend on catch2.
cd tests
meson setup builddir
meson test -Cbuilddir
-
Only a few data types are supported.
-
The numpy header is a literal Python dictionary and the Python syntax is very permissive. libnpy's parser was only tested with numpy's implemenation of the .npy format.
Feel free to send me a pull request, open an issue, or contact me directly.
The project is licensed under the MIT license