前言

我們正在嘗試改善一套 AI Inference 的程式,原本是由 Python 所撰寫,但是在 AI 後處理的部份速度太慢,所以想要讓新人改用 C++ 的程式以改善速度。

為了確保資料一樣,AI 辨識完得到的數據是 Numpy 格式,所以我們想將該資料儲存起來,直接給新人載入驗證程式碼。

起初想法是透過 Pickle 將 Buffer 儲存起來,但後來發現 Numpy 有提供相對應的方法。


NPY 是什麼?為什麼不用 Pickle ?

NPY 是一個由 Numpy 所提出的 Binary 的檔案格式。至於位什麼不用 Pickle 有下列幾個缺點:

  1. 儲存或載入 Pickle 文件需要透過複製的方式,對於大型的資料跟陣列可能速度會很慢。
  2. 數據不能透過 內存映射 直接訪問,加載大量數據非常的有用。不然可以會因為只需要一小部份的資料就全部載入。

上述方案都可以透過 ndarray.tofile()fromfile() 去做儲存跟載入 Buffer 但是就會有上述問題。

而 NPY 就是為了解決這些問題!


哪些工具可以載入 NPY 檔案 ?

現在很常見的是 Eigen 在 C++ 當中處理 2D 陣列很常見的套件,再來是一個後起之秀 xtensor 號稱要成為 C++ 借的 Numpy,甚至是有一個前輩寫了一套簡單的工具叫 cnpy

到底使用那一款會比較好呢?

cnpy

xtensor

eigen