做高維數據索引實驗,發現有個比較好的c/python/matlab庫,yael-鏈接地址
不過目前只支持linux和macOS。
特此將安裝過程記錄下來:
版本信息
- yael_v438
- ubuntu 14.04 或者 14.10
準備工作
安裝gfortran, blas, lapack, swig
$ sudo apt-get install gfortran
$ sudo apt-get install libblas3gf
$ sudo apt-get install liblapack3gf
$ sudo apt-get install swig
編譯核心庫
切換到yael目錄下
$ sudo ./configure.sh
$ # 如果CPU支持sse4:$ sudo ./configure.sh --msse4
$ # 打開生成的makefile.inc, 將其中的python2.x修改爲計算機上
$ # 對應的python版本(例如我的是python2.7)
$ sudo make
此時yael下核心目錄的C代碼編譯完畢,可以到test/c和prog下運行測試代碼。
matlab
matlab目錄下的編譯過程中遇到了一個ssaupd_, sseupd_ underfined的問題(在Make.m的第13行及之後)。在這篇帖子的幫助下得以修正。
具體來講,需要更改三處:
- 檢查libarpack的安裝,使用apt-get安裝libarpack
- 將configure.sh中的 arpackldflags=/usr/lib64/libarpack.so.2
改成arpackldflags=/usr/lib/libarpack.so.2 - 將子文件matlab中的Make.m中的 -lmwarpack從LDFLAGS中移出來,放在選項-lmwblas的後面
然後,切換到yael目錄下
$ cd matlab目錄
$ matlab -nojvm // 命令行運行matlab
$ Make
python
$ sudo ./configure.sh --enable-numpy
$ make
$ # 如果要使用python腳本,需要添加--enable-numpy,否則會出現python代碼調用的部分方法不存在的問題
之後將yael庫中的python庫文件複製到系統python的包中,例如系統python版本是2.7,具體如下:
- 在/usr/local/lib/python2.7/dist-packages/下建立一個yael目錄
- 將yael核心目錄中的所有.py文件連同編譯出的_yael.so文件一起復制到新創建的yael目錄中即完成python版本yael的安裝
- yael提供了ynumpy, yael, threads, yutils幾個庫,可以在自己的python腳本中調用,調用方式爲from yael import yael, ynumpy
注意_yael.so文件十分重要,一定記得複製。