ほんとのこと知りたいだけなのに。

夏休みはもうおわり。

burgled-batteries をインストールしてみる。

CLML で HDP-LDAが動かない問題があり泣く泣くPythonで実装することにしました。

最後のささやかな抵抗として Common Lisp から Python をコールことにします。

そのため burgled-batteries というライブラリを利用しますのでインストールします。

github.com

環境

インストールする環境は以下の通りです。

item value
OS openSUSE Tumbleweed 20160710
Python 2.7.12

インストール

python-devel のインストール

まず python-devel をインストールします。

zypper で問題なし。

> zypper nstall python-devel
Unknown command 'nstall'
Type 'zypper help' to get a list of global options and commands.
someml@linux-95z0:~> zypper install python-devel
Root privileges are required for installing or uninstalling packages.
someml@linux-95z0:~> sudo zypper install python-devel
[sudo] password for root: 
Loading repository data...
Reading installed packages...
Resolving package dependencies...

The following NEW package is going to be installed:
  python-devel

The following 2 packages are going to be upgraded:
  python-base python-xml

2 packages to upgrade, 1 new.
Overall download size: 3.4 MiB. Already cached: 5.7 MiB. After the operation,
additional 20.9 MiB will be used.
Continue? [y/n/? shows all options] (y): y
In cache python-base-2.7.12-1.3.x86_64.rpm (1/3),   5.6 MiB ( 23.2 MiB unpacked)
In cache python-xml-2.7.12-1.3.x86_64.rpm  (2/3), 197.5 KiB (888.1 KiB unpacked)
Retrieving package python-devel-2.7.12-1.3.x86_64
                                           (3/3),   3.4 MiB ( 20.9 MiB unpacked)
Retrieving: python-devel-2.7.12-1.3.x86_64.rpm .............[done (661.7 KiB/s)]
Checking for file conflicts: .............................................[done]
(1/3) Installing: python-base-2.7.12-1.3.x86_64 ..........................[done]
(2/3) Installing: python-xml-2.7.12-1.3.x86_64 ...........................[done]
(3/3) Installing: python-devel-2.7.12-1.3.x86_64 .........................[done]

burgled-batteries のインストール

お次は burgled-batteries 自身のインストールです。

quickload で問題なし。

CL-USER> (ql:quickload :burgled-batteries)
To load "burgled-batteries":
  Load 1 ASDF system:
    burgled-batteries
; Loading "burgled-batteries"
; cc -m64 -I/usr/include/python2.7/ -I/usr/include/python2.7/ -o /home/someml/.cache/common-lisp/sbcl-1.3.10-linux-x64/home/someml/quicklisp/dists/quicklisp/software/burgled-batteries-20160825-git/grovel__grovel-tmpAAURSO1 -I/home/someml/quicklisp/dists/quicklisp/software/cffi_0.17.1/ /home/someml/.cache/common-lisp/sbcl-1.3.10-linux-x64/home/someml/quicklisp/dists/quicklisp/software/burgled-batteries-20160825-git/grovel__grovel.c
; /home/someml/.cache/common-lisp/sbcl-1.3.10-linux-x64/home/someml/quicklisp/dists/quicklisp/software/burgled-batteries-20160825-git/grovel__grovel /home/someml/.cache/common-lisp/sbcl-1.3.10-linux-x64/home/someml/quicklisp/dists/quicklisp/software/burgled-batteries-20160825-git/grovel__grovel.grovel-tmp.lisp
..................................................
..................................................
..................................................
..................................................
..........
(:BURGLED-BATTERIES)

テストの実行

(ql:quickload :burgled-batteries-tests) でテストをロードして (asdf:test-system :burgled-batteries) で実行します。

テストも通り問題なし。

CL-USER> (asdf:test-system :BURGLED-BATTERIES)
Start: BURGLED-BATTERIES
    :
   (略)
    :
........................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................
6 tests submitted; all passed.
T

終わり

今後は書籍「実践 機械学習システム」のコードを参考にしながら実装していきたいと思います。

実践 機械学習システム

実践 機械学習システム

LAPACK

LAPACK の文章インデックスです。

LAPACK とは

LAPACK (Linear Algebra PACKage) は線型計算のための数値解析ソフトウェアライブラリで、線型方程式や線型最小二乗問題、固有値問題、特異値問題等を数値的に解くために利用される。 ... LAPACK(Wikipedia) 抜粋

Contents

ルーチン

LAPACK は三つのルーチンで構成されています。(以下Wkipedia抜粋)

ルーチン 概要
ドライバルーチン
(driver routines)
LAPACKが扱うことが可能な問題を解くためのルーチン。
利用者の要請に合致する機能のドライバルーチンが存在する場合にはそのルーチンの利用が推奨される。
計算ルーチン
(computational routines)
問題を解くために必要な計算タスクを実行するためのルーチン。
利用者の要請に合致するドライバルーチンが存在しない場合は
計算ルーチンを組み合わせて問題を解くことになる。
補助ルーチン
(auxiliary routines)
補助的に利用されるルーチン。
ブロックアルゴリズム内部で利用される計算タスクの一部を実行するものや、
BLASの機能をわずかに拡張したものが含まれる。

See Also

LAPACK サンプルプログラム集 を写経してみます。

LAPACK サンプルプログラム集 を写経してみます。

丁度日本語情報だったので。

http://www.nag-j.co.jp/lapack/lapack-ex/lapack-ex.html

ルーチン一覧

これだけ計算ができるようすね。

まぁ現時点では何のこっちゃさっぱりです。

ルーチン明細

ルーチンのコードとそのコードを分解した 精度から処理内容の四つの列で一覧にしてみました。

カラム 説明 ex
名称 ルーチンの名称。 BGGSVX
精度 最初の一桁。 B
行列の型 2-3桁。 GG
処理内容1 最後の三桁。 その三桁の前二桁。 SV
処理内容2 最後の一桁。 X

※ 処理内容は1と2に分割するのは間違いなのかもしれませんが法則性はありそうなのでとりあえず分離して一覧にしています。

実線形方程式

ルーチン 精度 行列
の型
処理
内容1
処理
内容2
DGBSV D GB SV ---
DGBSVX X
DGESV GE ---
DGESVX X
DGTSV GT ---
DGTSVX X
DPBSV PB ---
DPBSVX X
DPOSV PO ---
DPOSVX X
DPPSV PP ---
DPPSVX X
DPTSV PT ---
DPTSVX X
DSPSV SP ---
DSPSVX X
DSYSV SY ---
DSYSVX X

複素線形方程式

ルーチン 精度 行列
の型
処理
内容1
処理
内容2
ZGBSV Z GB SV ---
ZGBSVX X
ZGESV GE ---
ZGESVX X
ZGTSV GT ---
ZGTSVX X
ZHESV HE ---
ZHESVX X
ZHPSV HP ---
ZHPSVX X
ZPBSV PB ---
ZPBSVX X
ZPOSV PO ---
ZPOSVX X
ZPPSV PP ---
ZPPSVX X
ZPTSV PT ---
ZPTSVX X
ZSPSV SP ---
ZSPSVX X
ZSYSV SY ---
ZSYSVX X

実線形最小二乗

ルーチン 精度 行列
の型
処理
内容1
処理
内容2
DGELS D GE LS ---
DGELSD D
DGELSS S
DGELSY Y

複素線形最小二乗

ルーチン 精度 行列
の型
処理
内容1
処理
内容2
ZGELS Z GE LS ---
ZGELSD D
ZGELSS S
ZGELSY Y

実一般化線形最小二乗

ルーチン 精度 行列
の型
処理
内容1
処理
内容2
DGGLSE D GG LS E
DGGGLM GL M

複素一般化線形最小二乗

ルーチン 精度 行列
の型
処理
内容1
処理
内容2
ZGGLSE Z GG LS E
ZGGGLM GL M

実対称固有値問題

ルーチン 精度 行列
の型
処理
内容1
処理
内容2
DSBEV D SB EV ---
DSBEVD D
DSBEVX X
DSPEV SP ---
DSPEVD D
DSPEVX X
DSTEV ST ---
DSTEVD D
DSTEVR R
DSTEVX X
DSYEV SY ---
DSYEVD D
DSYEVR R
DSYEVX X

複素エルミート固有値問題

ルーチン 精度 行列
の型
処理
内容1
処理
内容2
ZHBEV Z HB EV ---
ZHBEVD D
ZHBEVX X
ZHEEV HE ---
ZHEEVD D
ZHEEVR R
ZHEEVX X
ZHPEV HP ---
ZHPEVD D
ZHPEVX X

実非対称固有値問題

ルーチン 精度 行列
の型
処理
内容1
処理
内容2
DGEEV D GE EV ---
DGEEVX X
DGEES ES ---
DGEESX X

複素非対称固有値問題

ルーチン 精度 行列
の型
処理
内容1
処理
内容2
ZGEEV Z GE EV ---
ZGEEVX X
ZGEES ES ---
ZGEESX X

実一般化対称固有値問題

ルーチン 精度 行列
の型
処理
内容1
処理
内容2
DSBGV D SB GV ---
DSBGVD D
DSBGVX X
DSPGV SP ---
DSPGVD D
DSPGVX X
DSYGV SY ---
DSYGVD D
DSYGVX X

複素一般化エルミート固有値問題

ルーチン 精度 行列
の型
処理
内容1
処理
内容2
ZHBGV Z HB GV ---
ZHBGVD D
ZHBGVX X
ZHEGV HE ---
ZHEGVD D
ZHEGVX X
ZHPGV HP ---
ZHPGVD D
ZHPGVX X

実一般化非対称固有値問題

ルーチン 精度 行列
の型
処理
内容1
処理
内容2
DGGEV D GG EV ---
DGGEVX X
DGGES ES ---
DGGESX X

複素一般化非対称固有値問題

ルーチン 精度 行列
の型
処理
内容1
処理
内容2
ZGGEV Z GG EV ---
ZGGEVX X
ZGGES ES ---
ZGGESX X

実特異値分解

ルーチン 精度 行列
の型
処理
内容1
処理
内容2
DGESDD D GE SD D
DGESVD SV D

複素特異値分解

ルーチン 精度 行列
の型
処理
内容1
処理
内容2
ZGESDD Z GE SD D
ZGESVD SV D

実一般化特異値分解

ルーチン 精度 行列
の型
処理
内容1
処理
内容2
DGGSVD D GG SV D

複素一般化特異値分解

ルーチン 精度 行列
の型
処理
内容1
処理
内容2
ZGGSVD Z GG SV D

各カラムの説明

各カラムの説明を書きます。

ここを参照に。

わからないものもあるのでそこは???にしてスルーしています。

精度

説明(英語) 説明(日本語)
S REAL 単精度の実数
D DOUBLE PRECISION 倍精度の実数
C COMPLEX 単精度の複素数
Z COMPLEX*16 or DOUBLE COMPLEX 倍精度の複素数

行列の型

説明
BD bidiagonal
DI diagonal
GB general band
GE general (i.e., unsymmetric, in some cases rectangular)
GG general matrices, generalized problem (i.e., a pair of general matrices)
GT general tridiagonal
HB (complex) Hermitian band
HE (complex) Hermitian
HG upper Hessenberg matrix, generalized problem (i.e a Hessenberg and a triangular matrix)
HP (complex) Hermitian, packed storage
HS upper Hessenberg
OP (real) orthogonal, packed storage
OR (real) orthogonal
PB symmetric or Hermitian positive definite band
PO symmetric or Hermitian positive definite
PP symmetric or Hermitian positive definite, packed storage
PT symmetric or Hermitian positive definite tridiagonal
SB (real) symmetric band
SP symmetric, packed storage
ST (real) symmetric tridiagonal
SY symmetric
TB triangular band
TG triangular matrices, generalized problem (i.e., a pair of triangular matrices)
TP triangular, packed storage
TR triangular (or in some cases quasi-triangular)
TZ trapezoidal
UN (complex) unitary
UP (complex) unitary, packed storage

処理内容1

説明
ES ???
EV ???
GL ???
GV ???
LS ???
SD ???
SV 線型方程式系の処理

処理内容2

説明
D ???
E ???
M ???
R ???
S ???
X ???
Y ???

おわり

線型代数学勉強しなおすので今後は LAPACK にお世話になりそう。

今後数学起点としたプログラミングスキルを伸ばしたいので。