夢に向かって、好奇心を持ち、疑問を持ち続ける。それが努力。

趣味でロボット職人を目指す自称AI研究者のメモです。

LaTeXコマンド集(よく使うテクニック編)

LaTeXを使って文書やスライドを作るときによく使う便利なコマンドを記載しておきます.

Texのコマンド集

図に関するコマンド

図の挿入

% パッケージの指定(\begin{document}よりも前に記載)
\usepackage[dvipdfmx]{graphicx}
\begin{figure}
\centering
\includegraphics[width=0.8\linewidth]{(挿入したいファイル名).png}
\end{figure}

図の上下の余白をなくす

\setlength¥intextsep{0pt}
\setlength¥textfloatsep{0pt}

表に関するコマンド

表の挿入

\begin{table}[htb]
\begin{tabular}{lcrr}
\hline
& a & b & c \\ \hline
value & 100 & 28 & 5 \\ \hline
\end{tabular}
\end{table}

複数ページのまたがる表の作り方

\begin{longtable}
\end{longtable}

文字サイズの指定

\tiny
\scriptsize
\footnotesize
\normalsize
\large
\Large
\LARGE
\huge
\Huge

数式の記入

\begin{equation}
% 通常はequation環境で良い.
\end{equation}

\begin{eqnarray}
% 複数行にわたって位置を合わせるときにこちらを利用する.
% &を用いて位置を合わせるときは先頭にも記載が可能(位置を合わせたい箇所を&&で囲む方法).(でもちょっと古いやり方a.alignの方が良い.)
% ナンバリングなしのときは\nonumber
\end{eqnarray}

\begin{align}
% &を用いて複数行の数式の位置を中央に合わせることが可能.\\で改行.
% 複数行にわたる場合,改行した位置にナンバリングしない場合には\nonumberを記載(\nonumber \\)
\intertext{(で数式の途中にテキストの挿入も可能)}
\end{align}

\begin{align*}
% alignでナンバリングなしのときは,\nonumberではなく*を用いる
\end{align*}

その他

空白行を追加する

\vspace{1in}
\vspace{\baselineskip}

色付き文字,マーカをつけるコマンド

\newcommand{\Mark}[1]{\colorbox{yellow}{#1}}
\Mark{この文書はマーカされます}
\newcommand{\Red}[1]{\textcolor{red}{#1}}
\Red{この文書は赤色文字になります}

beamerで使うコマンド

beamerの基本

\begin{frame}[allowframebreaks]
\frametitle{title}
\end{frame}

このように,allowframebreaksをつけることで,複数ページへの分割を自動でしてくれる.

一枚のスライドに入るように,自動的に縮小させる設定.

\begin{frame}[shrink]
\frametitle{title}
\end{frame}

optionにsqueezeと記載すれば,縦方向の空白行を自動で縮小してくれる.


beamer等でテキストボックスを任意の位置に配置

\begin{textblock*}{1.0\linewidth}(25pt, 90pt) %(x軸の位置,y軸の位置)
\begin{figure}
\centering
\includegraphics[width=0.8¥linewidth]{(挿入したいファイル名).png}
\end{figure}
\end{textblock*}


以上です.参考になれば幸いです.

知らなかったpythonのrandint

pythonで,ある値の範囲からランダムに数字(ここではint型の数字)を選択するときrandint関数を使うが,どうやら値の範囲がnumpyを使う場合とpython標準のrandom関数を使う場合とで違うらしい.

aからbまでを範囲とするとき.

random.randintの場合は,[a,b]のようにbが含まれるが,
numpy.random.randintの場合は,[a,b)のように,bは含まれない.

違いはこの通り.

>>> import numpy as np
>>> import random
>>> a=0
>>> b=3
>>> i=10

>>> # random関数を使ったとき
>>> while i > 0:
...     print random.randint(a,b)
...     i = i -1
... 
3
2
3
0
3
2
0
0
2
2
>>> # numpyのrandom関数を使ったとき
>>> i=10
>>> while i > 0:
...     print np.random.randint(a,b)
...     i = i -1
... 
0
0
0
2
2
1
1
2
2
2
>>> 

複数の言語を使う場合には,同じ名前でも同様のことができる関数と思わないようにとは思っていたけど,
同一言語でも,まさか異なるポリシーの関数があったとは!

やっぱりライブラリの関数を使う場合には,確認が必要ですね:)

googleのword2vecを使ってみる(on Mac)

word2vecって良くきくので,昨年googleが公開したword2vecを使ってみたいと思います.

インストールは簡単

git clone https://github.com/svn2github/word2vec.git

でgitから取ってくるだけ.

cd word2vec でディレクトリに入り,
make が通れば完了.

私の環境では(特にmacでは)
malloc.hがないと怒られたので.

#include <malloc.h>

を全て

#include <stdlib.h>

に変更.

無事にコンパイルが通りました.

あとは,

./demo-word.sh

を実行して,単語を入力すればデモの試し成功!

と思ったら,
wgetコマンドがなくてtrain用データのインストールが失敗していた.

gzip: can't stat: text8.gz (text8.gz.gz): No such file or directory

ので,demo-word.shの中でwgetコマンドを curl -o に変更.

curl http://mattmahoney.net/dc/text8.zip -o text8.gz

さらに,
ERROR: training data file not found!

と怒られたが,
http://mattmahoney.net/dc/text8.zipがうまく保存できていなかったり
パスの指定が誤ってたりすると,解凍に失敗するので,
上記エラーがでたときは,保存データの容量等でうまく保存できているか確認すると良さそうです.


ロードと学習が成功すれば,次回以降は,毎回学習する必要はないので,

./distance vectors.bin

だけで使えます.

以上!


<参考>
malloc.hについては以下のページにお世話になりました.感謝!
http://blog.tottokug.com/entry/2014/04/17/160603

pythonの文字コードについて

pythonは文字列処理が得意だけど日本語を扱うときは文字コードがちょっと厄介だったりする.

特に注意が必要なunicode型とstr型について私がはまったところをメモ.

やりたかったことは,キーに日本語文字列を持つ辞書に対して,標準入力で取得した日本語文字列との比較を行いマッチしたら”OK”を返すというもの.

これに対して,同じ日本語であるはずなのに,比較で失敗する事象が発生した.
最初から文字コードを疑っていたので.全てのファイルに
# coding: utf-8
を記載.ファイル読み込みなどの箇所は,全て,’utf-8’にした.

しかし,まだ一致しない..

疑ったのは,unicode, stringの型の違い.

やっぱりそうだった.


 pythonから標準入力をするとき,入力はstring形式である.

 しかし,辞書のキーに日本語文字列を用いるとき,unicode型で保存される.

従って,辞書の中に標準入力から取得した文字列そのままを当てはめようとすると,失敗する.

以下に成功する例と失敗する例を記載する.

def proc(instr):
    // 失敗する例
    if instr in dic.keys():
        print “this cannot match”

    // 成功する例
    units = unicode(instr, ‘utf-8’)
    if units in dic.keys():
        print “this can succeed to match”

while(True):
    line = raw_input('input : ')  
    ## for stdin
    insert = proc(line) 
    print instr

ちなみにdicは,
dic={u'あ':aaa, u'い':iii}
のような形式を想定.

以上.

ご参考まで:)

Matlabを使いこなす(入出力編)

Matlabの入出力にはいろんなファイル形式に対応してて便利です.
今日はそのうちの少しを紹介します.

・入力関数
load
dlmread
textread
wk1read
imread
wavread
aviread

・出力関数
save
fprintf
dlmwrite
wk1write
imwrite
wavwrite
avifile

以下によく使う出力・入力のセットをサンプルコードで書いたので,参考にどうぞ.

・saveとloadのサンプル

 a=3
 b=[2,3]
 % 出力(パラメータの保存)
 filename='matsample.mat'
 save(filename)
 % 入力(パラメータの取得 )
 c=load(filename)
 c.a  
 c.b

・dlmwriteとdlmreadのサンプル

  b=[1,2,3;2,3,1;3;3;5]
  % 出力(保存)
  filename='csvsample.dat'
  dlmwrite(filename,b,',')
  csvwrite(filename,b)
  % 入力(ロード)
  dlm=dlmread(filename, ',')
  csv=csvread(filename)

 
・fopenを使ったテキスト入出力

  % 出力
  sampletext='aabbcc\ndef'
  filename='sample.txt'
  fileid=fopen(filename,'w')
  fprintf(fileid,sampletext)
  fclose(fileid)
  % 入力
  fileid=fopen(filename)
  while fileid < 0
      line=fgetl(fileid)
	  disp(line)
  end
  fclose(fileid)

以上です.
Matlab入門講座はまた〜!

boost.pythonを使って見る

boost.pythonは,C++の関するやライブラリをpythonから簡単に使えるようにするためのパッケージ.

どれだけ便利かについては,以下のURLが参考になる.
Boost.Python の機能をざっと紹介してみる - muddy brown thang

以下はlinuxでのインストール手順について簡単にまとめたので参考程度に.

boost.pythonのサイトは,以下.
Boost C++ Libraries

まず,wgetコマンドにて,urlからパッケージをダウンロードします.
wget https://sourceforge.net/projects/boost/files/boost/1.62.0/boost_1_62_0.tar.bz2

次に,解凍.
tar --bzip2 -xf boost_1_62_0.tar.bz2

PATHに展開先ディレクトリを指定することで,
pythonファイル内でimport boost/python ができるはず.

以上です.また:)

anacondaを使ってpython2系3系を共存させる

python2系とpython3系って意外に違って困ることありますよね.

今日はanacondaを使って両方を切り替えて使う方法を紹介します.
# anacondaはすでにインストールされている前提で記載します.

anaconda3で,python3系が使われている場合
pythonと打った時に,pythonのバージョンが表示されるのでどちらが動いているか確認できます)

以下のコマンドでpython2系の環境が構築できます.

conda create -n py2 python=2.7

続いて,
source activate py2

とすれば,上記で構築したpython2.7の環境に入ることができます.

以上.anacondaを使っていると簡単ですね.


anacondaでない場合には,pyenvを使って切り替える方法があります,
以下,簡単にメモしておきます.



まずはpyenvを使えるようにします.
以下からインストールしてください.

git clone https://github.com/yyuu/pyenv ~/.pyenv

次にpyenvを使えるように設定します.

~/.bashrcの中に,

export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init -)"

を追記してください.

source ~/.bashrcもしくは,bashの再起動で,変更を反映させたら,
pyenv version
と打ってエラーにならないことを確認します.


環境構築はここまで.

その後,python実行時に,python2 *.pyやpython3 *.pyとすることで,
バージョンを指定して実行することができます.

以上.

これでpythonの実行環境が快適になりました☆