twythonの導入とテスト

pythonを使ったtwitterbotを作るために、twythonを導入してみた。はじめはpython-twitterで試そうとしたが、「APIが古い」エラー(The Twitter REST API v1 is no longer active. Please migrate to API v1.1)が出たので、API v1.1に対応しているtwythonにすることにした。手順は以下の通り。

1. twythonの導入
twythonを導入する。easy_installが導入されていれば、
$easy_install twython
でインストールできる。

2. dev.twitter.comへの登録
dev.twitter.comにアクセスし、twitterアカウントでログインする。My applicationsを作成する必要があるので、

  1. Name(botの名前)
  2. Description(botの詳細)
  3. Website(自分のウェブサイト、もし持っていれば)

を登録する。

3. 権限の変更
My application → Settingsと進み、Application Typeを変更する。最初は"Read Only"なので、"Read and Write"などに変更する。

4. consumer keyなどの取得
My application → Detailsと進み、ページ下部の"Recreate my access token"ボタンを押す。以下の4つが取得できていればOK。

  • Consumer key
  • Consumer secret
  • Access token
  • Access token secret

以下が、上記で登録したユーザーからツイートを発信するためのテストサンプル。

# -*- coding: utf-8 -*-

import twython

if __name__ == '__main__':
    consumerKey = CONSUMERKEY
    consumerSecret = CONSUMERSECRET
    accessToken = ACCESSTOKEN
    accessSecret = ACCESSSECRET

    api = twython.Twython(app_key=consumerKey,
                  app_secret=consumerSecret,
                  oauth_token=accessToken,
                  oauth_token_secret=accessSecret)
    test_tweet_str = u'(ツイート内容)'

    try:
        api.update_status(status=test_tweet_str)
    except twython.TwythonError as e:
        print e

setuptoolsのセットアップ

Pythonで一番最初に入れるべきパッケージ setuptools と pip」というサイト
Pythonで一番最初に入れるべきパッケージ setuptools と pip - Life with Python
があったので、setuptoolsをインストールすることにした。

このサイトの右側のダウンロードボタンから、setuptools-0.9.8.tar.gzをダウンロードした。
setuptools · PyPI

その後、ファイルを解凍して、フォルダを「C:\Python27\Lib」フォルダの下に配置した。
コマンドプロンプトから「C:\Python27\Lib\httplib2-0.7.1」フォルダに移動し、
$ python setup.py build
$ python setup.py install
を実行して、setuptoolsのセットアップができた。

ブロック行列の逆行列(応用2・一般のブロック行列)

ブロック行列の逆行列は、ブロック行列を

  • ブロック対角行列
  • 対角成分が単位行列のブロック三角行列

の積に分解し、次の3種類の逆行列公式を用いて計算する。

  1. \begin{bmatrix}A & O \\ O & D \\ \end{bmatrix}^{-1} =  \begin{bmatrix}A^{-1} & O \\ O & D^{-1} \\ \end{bmatrix}
  2. \begin{bmatrix}I & X \\ O & I \\ \end{bmatrix}^{-1} =  \begin{bmatrix}I & -X \\ O & I \\ \end{bmatrix}
  3. \begin{bmatrix}I & O \\ X & I \\ \end{bmatrix}^{-1} =  \begin{bmatrix}I & O \\ -X & I \\ \end{bmatrix}

今回は、一般のブロック行列
 \begin{bmatrix} A & B \\ C & D \\ \end{bmatrix}
行列式を求める。

小行列Aについて、逆行列A^{-1}が存在している場合、ブロック行列のLDU分解を用いる。

まずこのブロック行列はブロック対角行列とブロック三角行列の積で表されるとして、
 \begin{bmatrix} A & B \\ C & D \\ \end{bmatrix} =  \begin{bmatrix} I & O \\ X & I \\ \end{bmatrix}  \begin{bmatrix} P & Q \\ O & R \\ \end{bmatrix}  =  \begin{bmatrix} P & Q \\ XP & XQ+R \\ \end{bmatrix}
成分を比較すると、P=A, Q=B, X=CA^{-1}, R=D-CA^{-1}Bとなるので、
 \begin{bmatrix} A & B \\ C & D \\ \end{bmatrix} = \begin{bmatrix} I & O \\ CA^{-1} & I \\ \end{bmatrix} \begin{bmatrix} A & B \\ O & D-CA^{-1}B \\ \end{bmatrix}
とLU分解できた。さらに右辺をブロック対角行列とブロック上三角行列の積にすると、
 \begin{bmatrix} A & B \\ C & D \\ \end{bmatrix} = \begin{bmatrix} I & O \\ CA^{-1} & I \\ \end{bmatrix} \begin{bmatrix} A & O \\ O & D-CA^{-1}B \\ \end{bmatrix} \begin{bmatrix} I & A^{-1}B \\ O & I \\ \end{bmatrix}
と、上の3種類の行列の積にLDU分解できた。
あとは、S = D-CA^{-1}Bとして、逆行列の積の公式を用いると、
 \begin{bmatrix} A & B \\ C & D \\ \end{bmatrix}^{-1} = \begin{bmatrix} I & -A^{-1}B \\ O & I \\ \end{bmatrix} \begin{bmatrix} A^{-1} & O \\ O & S^{-1} \\ \end{bmatrix} \begin{bmatrix} I & O \\ -CA^{-1} & I \\ \end{bmatrix}
となる。
なお、右辺の積を計算することで、
 \begin{bmatrix} A & B \\ C & D \\ \end{bmatrix}^{-1} = \begin{bmatrix} A^{-1}+A^{-1}BS^{-1}CA^{-1} & -A^{-1}BS^{-1} \\ -S^{-1}CA^{-1} & S^{-1} \\ \end{bmatrix}
が得られる。

ブロック行列の逆行列(応用1・ブロック三角行列)

ブロック行列の逆行列は、ブロック行列を

  • ブロック対角行列
  • 対角成分が単位行列のブロック三角行列

の積に分解し、次の3種類の逆行列公式を用いて計算する。

  1. \begin{bmatrix}A & O \\ O & D \\ \end{bmatrix}^{-1} =  \begin{bmatrix}A^{-1} & O \\ O & D^{-1} \\ \end{bmatrix}
  2. \begin{bmatrix}I & X \\ O & I \\ \end{bmatrix}^{-1} =  \begin{bmatrix}I & -X \\ O & I \\ \end{bmatrix}
  3. \begin{bmatrix}I & O \\ X & I \\ \end{bmatrix}^{-1} =  \begin{bmatrix}I & O \\ -X & I \\ \end{bmatrix}

(応用1-1)上三角ブロック行列
 \begin{bmatrix} A & B \\ O & D \end{bmatrix}
というパターンである(ただし、小行列A,Dについて、逆行列A^{-1},D^{-1}が存在しているとする。)
このブロック行列はブロック対角行列とブロック三角行列の積で表されるとして、
 \begin{bmatrix} A & B \\ O & D \\ \end{bmatrix} = \begin{bmatrix} P & O \\ O & Q \\ \end{bmatrix} \begin{bmatrix} I & X \\ O & I \\ \end{bmatrix}
と表す。右辺の積を求めると、
 \begin{bmatrix} P & O \\ O & Q \\ \end{bmatrix} \begin{bmatrix} I & X \\ O & I \\ \end{bmatrix} = \begin{bmatrix} P & PX \\ O & Q \\ \end{bmatrix}
となる。あとは最初の式と比較すると、 P=A, Q=D, X = A^{-1}Bなので、
 \begin{bmatrix} A & B \\ O & D \end{bmatrix} = \begin{bmatrix} A & O \\ O & D \end{bmatrix} \begin{bmatrix} I & A^{-1}B \\ O & I \end{bmatrix}
となる。したがって逆行列の積の公式を用いると、
 \begin{bmatrix} A & B \\ O & D \end{bmatrix} ^{-1} = \begin{bmatrix} I & -A^{-1}B \\ O & I \end{bmatrix} \begin{bmatrix} A^{-1} & O \\ O & D^{-1} \end{bmatrix}
となる。なお求められた逆行列は、もとの行列に対して左からかけても右からかけても単位行列になることが確認できる。

(応用1-2)下三角ブロック行列
 \begin{bmatrix} A & O \\ C & D \end{bmatrix}
というパターンである(ただし、小行列Aについて、逆行列A^{-1}が存在しているとする。)
このブロック行列はブロック対角行列とブロック三角行列の積で表されるとして、
 \begin{bmatrix} A & O \\ C & D \\ \end{bmatrix} = \begin{bmatrix} I & O \\ X & I \\ \end{bmatrix} \begin{bmatrix} P & O \\ O & Q \\ \end{bmatrix}
と表す。右辺の積を求めると、
 \begin{bmatrix} I & O \\ X & I \\ \end{bmatrix} \begin{bmatrix} P & O \\ O & Q \\ \end{bmatrix} = \begin{bmatrix} P & O \\ XP & Q \\ \end{bmatrix}
となる。あとは最初の式と比較すると、 P=A, Q=D, X = CA^{-1}なので、
 \begin{bmatrix} A & O \\ C & D \end{bmatrix} = \begin{bmatrix} I & O \\ CA^{-1} & I \end{bmatrix} \begin{bmatrix} A & O \\ O & D \end{bmatrix}
となる。したがって逆行列の積の公式を用いると、
 \begin{bmatrix} A & O \\ C & D \end{bmatrix} ^{-1} = \begin{bmatrix} A^{-1} & O \\ O & D^{-1} \end{bmatrix} \begin{bmatrix} I & O \\ -CA^{-1} & I \end{bmatrix}
となる。なお求められた逆行列は、もとの行列に対して左からかけても右からかけても単位行列になることが確認できる。

ブロック行列の逆行列(基本編)

ブロック行列の逆行列と同様に、多変量解析や制御ではブロック行列の逆行列も慣れておく必要がある。
ブロック行列の行列式と同様に、基本戦略は2つしかなく、

  1. 対角行列や「対角成分が単位行列の三角行列」の積に変形する
  2. 逆行列の積の公式((AB)^{-1} = B^{-1}A^{-1})を用いる

である。
つまり、行列をLUやUL、LDUなどの簡単な行列の積に変形してから逆行列を求めることである。

基本戦略1が重要な理由は、以下に示すようにブロック逆行列を求めることが簡単で覚えやすいからである。

(基本1)ブロック対角行列
\begin{bmatrix}A & O \\ O & D \\ \end{bmatrix}
というパターンである(ただし、小行列A,Dには逆行列A^{-1},D^{-1}が存在しているとする)。
これは、
\begin{bmatrix}A & O \\ O & D \\ \end{bmatrix} \begin{bmatrix}A^{-1} & O \\ O & D^{-1} \\ \end{bmatrix} = \begin{bmatrix}I & O \\ O & I \\ \end{bmatrix}
\begin{bmatrix}A^{-1} & O \\ O & D^{-1} \\ \end{bmatrix} \begin{bmatrix}A & O \\ O & D \\ \end{bmatrix} = \begin{bmatrix}I & O \\ O & I \\ \end{bmatrix}
なので、
\begin{bmatrix}A & O \\ O & D \\ \end{bmatrix}^{-1} =  \begin{bmatrix}A^{-1} & O \\ O & D^{-1} \\ \end{bmatrix}
となる。

(基本2)対角成分が単位行列のブロック上三角行列
\begin{bmatrix}I & X \\ O & I \\ \end{bmatrix}
というパターンである。
これは、
\begin{bmatrix}I & X \\ O & I \\ \end{bmatrix} \begin{bmatrix}I & -X \\ O & I \\ \end{bmatrix} = \begin{bmatrix}I & -X+X \\ O & I \\ \end{bmatrix} =  \begin{bmatrix}I & O \\ O & I \\ \end{bmatrix}
なので、
\begin{bmatrix}I & X \\ O & I \\ \end{bmatrix}^{-1} =  \begin{bmatrix}I & -X \\ O & I \\ \end{bmatrix}
となる。

(基本3)対角成分が単位行列のブロック下三角行列
ブロック上三角行列と同様に
\begin{bmatrix}I & O \\ X & I \\ \end{bmatrix}^{-1} =  \begin{bmatrix}I & O \\ -X & I \\ \end{bmatrix}
となる。


一般的によく使われる行列の逆行列は、LU分解・UL分解・LDU分解を用いて、上記の行列の積に変形したのち、積の逆行列の公式を用いればよい。
詳細は次記事で紹介する。

ブロック行列の行列式(応用2・一般のブロック行列)

基本的なブロック行列の行列式は以下の3つであった。

  1.  \begin{vmatrix} A & O \\ O & D \end{matrix} = |A||D|
  2.  \begin{vmatrix} I & X \\ O & I \end{matrix} = 1
  3.  \begin{vmatrix} I & O \\ X & I \end{matrix} = 1

今回は、一般のブロック行列
 \begin{bmatrix} A & B \\ C & D \\ \end{bmatrix}
行列式を求める。

(応用2-1)小行列Aについて、逆行列A^{-1}が存在している場合
ブロック行列のLU分解を用いる。
このブロック行列はブロック対角行列とブロック三角行列の積で表されるとして、
 \begin{bmatrix} A & B \\ C & D \\ \end{bmatrix} = \begin{bmatrix} I & O \\ X & I \\ \end{bmatrix} \begin{bmatrix} P & Q \\ O & R \\ \end{bmatrix}
右辺の積を計算すると、
 \begin{bmatrix} I & O \\ X & I \\ \end{bmatrix} \begin{bmatrix} P & Q \\ O & R \\ \end{bmatrix} = \begin{bmatrix} P & Q \\ XP & XQ + R \\ \end{bmatrix}
成分を比較すると、P=A, Q=B, X=CA^{-1}, R = D- CA^{-1}Bとなる。
よって、
 \begin{vmatrix} A & B \\ C & D \\ \end{vmatrix} = \begin{vmatrix} I & O \\ CA^{-1} & I \\ \end{vmatrix}\begin{vmatrix} A & B \\ O & D-CA^{-1}B \\ \end{vmatrix} = |A||D-CA^{-1}B|
と、ブロック行列の行列式が導ける。

(応用2-2)小行列Dについて、逆行列D^{-1}が存在している場合
ブロック行列のUL分解を用いる。
このブロック行列はブロック対角行列とブロック三角行列の積で表されるとして、
 \begin{bmatrix} A & B \\ C & D \\ \end{bmatrix} = \begin{bmatrix} I & X \\ O & I \\ \end{bmatrix} \begin{bmatrix} P & O \\ Q & R \\ \end{bmatrix}
右辺の積を計算すると、
 \begin{bmatrix} I & X \\ O & I \\ \end{bmatrix} \begin{bmatrix} P & O \\ Q & R \\ \end{bmatrix} = \begin{bmatrix} P+XQ & XR \\ Q & R \\ \end{bmatrix}
成分を比較すると、Q=C, R=D, X=BD^{-1}, P = A- BD^{-1}Cとなる。
よって、
 \begin{vmatrix} A & B \\ C & D \\ \end{vmatrix} = \begin{vmatrix} I & BD^{-1} \\ O & I \\ \end{vmatrix} \begin{vmatrix} A- BD^{-1}C & O \\ C & D \\ \end{vmatrix} = |D||A- BD^{-1}C|
と、ブロック行列の行列式が導ける。