Basics

./code/basics.py
#!/usr/bin/env python3
import numpy as np


def test_attr():
    a = np.array([[1, 2], [3, 4]], dtype=np.float32)
    assert isinstance(a, np.ndarray)

    assert a.dtype == np.float32
    assert isinstance(a.dtype, np.dtype)
    assert a.dtype.name == "float32"

    # number of axes
    assert a.ndim == 2

    assert a.shape == (2, 2)
    assert len(a.shape) == a.ndim

    # total number of elements is a.size
    assert a.size == a.shape[0] * a.shape[1]

    # each float occupies 4 bytes
    assert a.itemsize == 4
    assert isinstance(a.data, memoryview)


def test_array_creation():
    a = np.array([2, 3, 4])
    assert a.dtype == np.int64
    assert a.ndim == 1

    b = np.array([2.0, 3, 4])
    assert b.dtype == np.float64

    c = np.array([[1, 2], [3, 4]])
    assert c.ndim == 2
    assert c.shape == (2, 2)
    assert c.dtype == np.int64

    d = np.zeros((2, 3))
    assert d.dtype == np.float64
    assert d.shape == (2, 3)

    f = np.ones((2, 2))
    assert f.dtype == np.float64

    # uninitialized content; containing garbage data.
    e = np.empty((5, 5))
    assert e.dtype == np.float64

    g = np.empty((1, 2), dtype=np.int32)
    assert g.dtype == np.int32

    h = np.arange(3)
    assert h.dtype == np.int64

    # start=0, end=3
    i = np.arange(3, dtype=np.int32)
    assert i.dtype == np.int32
    np.testing.assert_equal(i, np.array([0, 1, 2]))

    # start=1, end=3
    k = np.arange(1, 3)
    np.testing.assert_equal(k, np.array([1, 2]))

    # start=1, end=8, step=3
    m = np.arange(1, 8, 3)
    np.testing.assert_equal(m, np.array([1, 4, 7]))

    # 4 numbers in the range [2, 5]
    n = np.linspace(2, 5, 4)
    assert n.dtype == np.float64
    np.testing.assert_equal(n, np.array([2, 3, 4, 5]))

    # note: The last number is included
    m = np.linspace(2, 5, 3)
    np.testing.assert_equal(m, np.array([2, 3.5, 5]))


def main():
    test_attr()
    test_array_creation()


if __name__ == "__main__":
    main()

Write to a binary file in Python and read it from C/C++

import numpy as np

a = np.array([0.25, 0.35, 0.45], dtype=np.float32)
with open("a.bin", "wb") as f:
    f.write(a.tobytes())
#include <stdio.h>
#include <vector>

int main() {
  FILE *fp = fopen("./a.bin", "rb");
  fseek(fp, 0, SEEK_END);
  int32_t n = ftell(fp);
  fseek(fp, 0, SEEK_SET);
  printf("n: %d\n", n);

  std::vector<float> d(n / sizeof(float));
  fread(d.data(), sizeof(float), n, fp);
  fclose(fp);
  for (auto f : d) {
    printf("%f ", f);
  }
  printf("\n");

  return 0;
}

Write to a binary file in C++ and read it from Python

std::vector<float> v(100*560);
FILE *fp = fopen("b.bin", "wb");
fwrite(v.data(), sizeof(float), v.size(), fp);
fclose(fp);
features = np.fromfile('./b.bin', dtype='uint8').view(np.float32).reshape(-1, 560)