Skip to content

A C++17 library for reading and writing NumPy .npy files, with optional .npz (zip) archive support

License

Notifications You must be signed in to change notification settings

symisc/sy-numpy-cpp

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 

Repository files navigation

syNumpy

A C++17 library for reading and writing NumPy .npy files, with optional .npz (zip) archive support

Documentation & Homepage: https://pixlab.io/numpy-cpp-library.

Features

  • 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.

Quick Start

  1. Include syNumpy.hpp in your C++17 project.
  2. Compile with -std=c++17.
  3. (Optional) Define SYNUMPY_ENABLE_NPZ=1 and link zlib (-lz) for .npz archiving.

Minimal Example

#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;
}

About

A C++17 library for reading and writing NumPy .npy files, with optional .npz (zip) archive support

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published