A C++17 library for reading and writing NumPy .npy files, with optional .npz (zip) archive support NpyArray : A container that stores the loaded array’s shape, word size, fortran order, and data in memory. Load & Save : syNumpy::loadNpy(...) reads from a file. syNumpy::loadNpyBuffer(...) reads from a raw memory buffer. syNumpy::saveNpy(...) writes or appends data. Append Mode : Save with mode = "a" to extend the first dimension of an existing file (if shapes match). Endian Checks : Warn if the file is big-endian while the system is little-endian (or vice versa). No auto-swapping. Optional NPZ : -DSYNUMPY_ENABLE_NPZ=1 enables zip-based .npz archiving (requires zlib ). Minimal example included. Include syNumpy.hpp in your C++17 project. Compile with -std=c++17. (Optional) Define SYNUMPY_ENABLE_NPZ=1 and link zlib (-lz) for .npz archiving. #include " syNumpy.hpp" #include < iostream> int main () { // 1) Save a float array { std::vector<float > data = {1 .0f , 2 .0f , 3 .0f }; syNumpy::saveNpy (" floats.npy" , data); // overwrites if file exists } // 2) Load it back { syNumpy::NpyArray arr = syNumpy::loadNpy (" floats.npy" ); std::vector<float > loaded = arr.asVector <float >(); std::cout << " Loaded " << loaded.size () << " floats: " ; for (auto f : loaded) std::cout << f << " " ; std::cout << " \n " ; } #if SYNUMPY_ENABLE_NPZ // 3) Create a .npz archive with multiple arrays { syNumpy::NpzArchive zip; std::vector<int > arr1 = {10 , 20 , 30 }; std::vector<double > arr2 = {3.14 , 2.71 }; zip.addArray (" ints" , arr1); zip.addArray (" doubles" , arr2); zip.save (" arrays.npz" ); } #endif return 0 ; }