Where NPY comes from
NumPy's developers introduced the format in 2007 (version 1.0 of the NPY specification) because the alternatives were all wrong for the job: pickle was insecure and Python-specific, raw binary lost the shape and dtype, and text lost precision and speed. Later revisions added a larger header for arrays with very many dimensions (2.0) and UTF-8 header encoding (3.0). The .npz variant is simply a ZIP of several .npy files.