做高维数据索引实验,发现有个比较好的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文件十分重要,一定记得复制。