今日も窓辺でプログラム

外資系企業勤めのエンジニアが勉強した内容をまとめておくブログ

Pythonでunzipってどうやるの?

Pythonのリストを結合するzip関数の逆の挙動を実現する方法について、今日初めて知ったので記事として残しておきます。

そもそもzip関数とは

zip関数は次の例のように、複数のイテラブル(下の例の場合はリスト)のi番目の要素をまとめた新しいイテレータを作る関数です。

name = ("Sato", "Tanaka", "Yamada")
score = (70, 80, 90)

# リストを作ったり
print(list(zip(name, score))) # [('Sato', 70), ('Tanaka', 80), ('Yamada', 90)]

# ループを回したり
for n, s in zip(name, score):
    print(n, s)
# Sato 70
# Tanaka 80
# Yamada 90

これと逆のこと、つまり

pair = [('Sato', 70), ('Tanaka', 80), ('Yamada', 90)]

というリストが与えられたときに、

name, score = unzip(pair)

といって名前とスコアのリストをそれぞれ得る、というような操作がしたいことがあるのですが、Pythonにunzipという関数は定義されていないようです。

unzipの実現方法

結論から言うと、次のコードでunzipが実現できます。

pair = [('Sato', 70), ('Tanaka', 80), ('Yamada', 90)]
name, score = zip(*pair)
print(name) # ('Sato', 'Tanaka', 'Yamada')
print(score) # (70, 80, 90)

なぜそうなるのか?

注目すべきは zip(*pair)の部分です。zipの引数の前にアスタリスクがついています。
関数呼び出しの引数の前についているアスタリスクは、公式ドキュメントにもあるように展開されて解釈されます。
つまり、先ほどの例だと

pair = [('Sato', 70), ('Tanaka', 80), ('Yamada', 90)]
zip(*pair)

この2行目の引数の部分が展開されて、次のように処理されることになります。

zip(('Sato', 70), ('Tanaka', 80), ('Yamada', 90))

zipの引数それぞれの2番目の要素(名前)、2番目の要素(スコア)がまとめられるので、確かにunzipに相当する動きをすることが確認できます。


参考サイト:
pythonでzip、unzip - Qiita
アスタリスクによるシーケンスの展開 - or1ko's diary

シンプルなRNNで文字レベルの言語モデルをTensorFlowで実装してみる

はじめに

GoogleやMicrosoftなどがディープラーニングを使用した機械翻訳をリリースして各所で話題になっています。こんな感じで記事にもなっています。

せっかくなのでこれらのニュースと少し関連のある、RNNを使用した言語モデルをTensorFlowで実装してみたいと思います。
まずはその第一弾として、文字レベルでの英語の言語モデルを実装します。また、学習の過程をTensorBoardを使用して可視化もしています。
今回はとりあえずRNNを組むことを目標とし、ハイパーパラメータの調整など精度を追求するための作業は行いません。

RNNを組むのは初めてで実装があっているか不安なので、もし間違っているところがあったらご指摘いただけると幸いです。

続きを読む

「ゼロから作るDeep Learning」を読んで知ったことのメモ

ディープラーニングの知識があまりない私が「ゼロから作るDeep Learning」を読んで知ったことを、自分用のメモも兼ねてまとめておきます。
本では実際のコードを使ってディープラーニングの基礎を解説していますが、今回の記事はメモなのでコードは出さずに断片的にメモしておきたいことを残しておきます。。
詳細が気になる方は、本やこの本のGitHubレポジトリを参考にしてください。

ゼロから作るDeep Learning ―Pythonで学ぶディープラーニングの理論と実装

ゼロから作るDeep Learning ―Pythonで学ぶディープラーニングの理論と実装

続きを読む

日経平均の日中の値動きと高い相関のある他国の指数は存在するのか?

この記事について

以前までの記事で、「日経平均株価の終値が、その日の始値に比べて上がる(UP)のか、下がる(DOWN)のか、ほぼ変わらない(SAME)のか」をTensorFlowを使って予測しようとするシリーズを投稿していました。
日経平均が日中どのくらい変動するかをTensorFlowで予測する (今までのまとめ) - 今日も窓辺でプログラム

いろいろ試しても精度がいまいちよくなかったので、その原因を探ってみよう、という記事です。

具体的には、過去数年分の株価指標と、今まで予測しようとしていた日経平均の日中の値動きの相関がどの程度かを確かめてみます。

続きを読む