読者です 読者をやめる 読者になる 読者になる

技術メモ

役に立てる技術的な何か、時々自分用の覚書。統計学、機械学習、神経科学、暗号理論...と幅広く興味があります。

2次元のランダムウォーク

import numpy as np import matplotlib.pyplot as plt time = 2000 state = np.zeros(2) orbit = np.zeros(2) for t in range(time): speed = 1 randomvec = np.random.random(2) - 0.5 randomvec *= speed/np.linalg.norm(randomvec) state += randomvec or…

pythonを使ってFitzHugh南雲方程式のnullclineを描く

pythonでヌルクラインを描く方法 いくつか方法があるようだけど、matplotlibとscipyを組み合わせる方法が良さそうだった。 FitzHugh南雲方程式 FitzHugh南雲方程式とは、一言でいうと神経細胞(ニューロン)の挙動を数理的に表した方程式のこと。ニューロン…

三目並べの全ての状態数とその遷移関係を数え上げるアルゴリズム

三目並べでとりうる盤面の状態数を数えてみた。 英語ではTicTacと言ってボードゲームAIの入門によく使われる題材だったりする。 ゲームの状態数はよく9マス×3状態で通りだとか最初は9通りで次の番は8通り…だから通りだとか言われるけれどどれも厳密な答えで…

引数のあるコマンドをエイリアスに登録する方法

OS

引数のあるコマンドをエイリアスに登録したい時、調べたのでメモ 例えば、複数のサーバーが用意されていてSSHするサーバーを使い分けるみたいな時。 ssh USER@SERVER1.com -p 8888 ssh USER@SERVER2.com -p 8888 ssh USER@SERVER3.com -p 8888 ...みたいなコ…

粘菌に迷路を解かせるシミュレーション

粘菌は凄い!なぜかって、脳がないのに餌までの最短経路を見つけることができる。 これが神経細胞の始まりだとか言われていたり言われていなかったりする 以前から知ってはいたが、調べているとニコ動でこんな動画があった。ちゃんとできている!しかもエク…

仮想環境の中でIPythonを使う方法 (virtualenv + ipython)

仮想環境下で pip install ipython ipythonとしても、デフォルトモードのipythonが立ち上がってしまう。 例えば、2系を標準に入れている端末で3系の仮想環境を作った時なんかは困ってしまう。簡単な解決法があったので紹介する。エイリアスにこれを登録して…

pythonで符号検定、ウィルコクソンの符号付き順位検定

符号検定 符号検定とは、勝ち負けなど〇×の判定で2つの群の優劣を判定する検定のこと。 「将棋ソフト同士を対決させて、試合の勝敗だけでソフトの強さを比較したい」等に使える。scipyを使う from scipy import stats stats.binom_test(x, n=None, p=0.5, al…

Extream Learning Machineの簡単実装

あまり知られていないかも知れないが、Extream Learning Machineというニューラルネットの一種がある。 3層のニューラルネットなんだけど、通常のニューラルネットと違い、学習は出力層と中間層の重回帰で学習する。通常のようなバックプロパゲーションのよ…

2系を使っているWindowsにtensorflow導入 (python2.7 + widows + tensorflow)

tensorflowを使いたいけどデフォルトでpython2系を使っていて困っていた。 幸いanacondaを使っていたので結果的には簡単に導入できたという話。 手順にすると簡単に見えるが、ここまで来るのに紆余曲折したから一応記録しておく。OS:Windows10 Anaconda4.2.…

最強の素数チェッカーを作ってみた

前回の記事の最後に書いた、決定的な素数判定と確率的な素数判定をハイブリッドにしたら最強なんじゃないかという考えのもと、最強の素数判定器を作ってみた。 特にひねりはないが、最初に3桁まで(引数で指定可能)の素数リストを作っておいて、確率的な素数…

確率的素数判定法 vs. エラトステネスの篩

素数判定をするのは暗号の分野ではすごく重要なんだけど、そこでよく使われるのが確率的素数判定法というもの。 競技プログラミングの問題に出てくる程度の素数判定では、エラトステネスの篩と呼ばれる有名な素数判定アルゴリズムで充分なのだけど、暗号に使…

word2vecで「単語の足し算引き算」をしてみる

word2vecを試してみたいけど使ったことがないという人が対象 とりあえず動かしてみるのが目的。 ※python2.7.12で動かしているけど、3系でも大丈夫なはず。 word2vecとは word2vecとは、ざっくり言えば 「単語をベクトル表現にでき、意味の足し算や引き算がで…

pythonの仮想環境に関する話

pythonのvirtualenvで仮想環境の作成について。windows版 どうして仮想環境を使うのか チームで開発する時など、環境を統一する必要がある。 ネットで公開する時は、ゼロから環境構築を再現して試してみたい時がある。 仮想環境ではライブラリは何もないので…

快適コマンドプロンプト生活 (Gow + ConEmu + chocolatey)

コマンドプロンプトはレガシー。使いづらい。見た目が嫌い。これだからWindowsはクソ。 と罵られてばかりのコマンドプロンプトだけど、今回はコマンドプロンプトを最大限に使いやすいくしてやろうという話。 Cygwinはホームが変だったり所々使いにくくて嫌い…

カオス理論入門(プログラム編)

カオスについて勉強していた時に書いて見たかったもの。アトラクターの軌道を見てみたい。 目標としては3次元プロットして一定軌道をグルグル回っているところをプロットしてみる。有名なレスラーアトラクターとローレンツアトラクターを描いていきたい。 実…

結局Flaskが使いやすそう

最近web関係を触っていて、javascriptの知識もまだまだ足りないんだけれど、少し勉強するうちにやっぱりフレームワークがないと超不便だよねってことに気付いた。 で、じゃあ何を勉強するのかって話になる。 まず考えたのがこの2つ Ruby on Rails Django Ru…

pythonでたまに使う用法(リスト・内包表記・三項演算子・lambda…)

pythonのちょっと特殊だけどたまに使う記法について備忘録。 ※2.7系で動かしているので3系では動かないかもしれない。要調査。 リスト操作 リストの重複削除 a = [1,1,4,4,3,3,2,2,5,5] list(set(a)) # >>[1,2,3,4,5] ※この書き方だと順序は保持されない順序…

ポモドーロテクニックという時間管理術

ポモドーロテクニックという時間管理術を知った。 一部ではもてはやされているようだけどどうなんだろう。ポモドーロテクニックとは 1. 25分+5分の休憩を1ポモドーロとする。 2.1ポモドーロ内には自分の決めたタスクだけに集中する。 3.4ポモドーロごと…

RSA暗号を実装してみる(プログラム編)

前回まではRSA暗号の原理を説明してきたけれど、いよいよ本題。実際コーディングに取り掛かる。理論では簡単に説明されるところでも実際にコーディングしてみると難しいところがある。 RSA暗号を実装してみる(知識編) - 技術メモ RSA暗号を実装してみる(…

RSA暗号を実装してみる(理論編)

知識編で説明したように、RSA暗号の最大の特徴は暗号鍵から復号鍵を類推することが難しいというところにある。今回は、この特徴が数学的にどのように実現できているのかについて見ていく。 RSA暗号を実装してみる(知識編) - 技術メモ RSA暗号を実装してみ…

RSA暗号を実装してみる(知識編)

WEPキーに脆弱性があって突破されてしまうということを知ってから、最近暗号理論に興味をもって勉強していた。その中で、RSA暗号すげえってなったから実装してみたいと思う。単純そうに見えて奥深い。今回はまず暗号について勉強した知識をまとめる。数学的…

pythonでニューロンのシミュレーション(Brianについて)2

スパイキングニューロンのシミュレータを触ってみる記事の2回目。 以前の投稿の続きとして、サンプルにはないものを書いてみた。 izhikevichモデルニューロンの集団発火 サンプルではLIFモデルだったが、izhikevichモデルで同じものを作ってみる。 プログラ…

scikit-learnで主成分分析(累積寄与率を求める)

pythonのライブラリでおなじみ、scikit-learnで主成分分析をする方法。 最終的には累積寄与率をプロットできるようにしたい。 基本 import matplotlib.pyplot as plt import seaborn as sns sns.set_style("whitegrid") import sklearn.decomposition # PCA…

webブラウザ上ででターミナルを動かすという変態的なライブラリButterfly

タイトル通りだけど、webブラウザ上でターミナルを動かすbutterflyというものを見つけたので触ってみた。 これといって使うメリットは思い浮かばないが、何しろ変態的でなんとなくカッコイイ。 コマンドはこれだけ(pipが使えない人はまずpipをから入れてくだ…

グラフが綺麗に描けるpythonのライブラリseabornを使うとグラフを描くのが楽しくなる

pythonのグラフを美しく描くライブラリseabornというのを知ったので触ってみる。 こちらが公式サイト Seaborn: statistical data visualization — seaborn 0.7.1 documentation こんなのも描けるようになる。 インストール conda install seaborn pipでもで…

networkxでネットワーク特徴量の分析

networkxを触った時の備忘録。今回扱ったのは無向グラフに限る。 用語などの解説は別の記事に譲りたい。 (networkx(1.11.0) python(2.7.12)) 適当なグラフを作成・可視化 import networkx as nx import numpy as np import matplotlib.pyplot as plt # gener…

SOM(自己組織化写像)のプログラム (python)

むかし作ったやつを手直しして載せる。 (昔のを見てると、行列で書けばいいものを全部for文で書いてたりして可愛い。) SOMとは SOMはイメージとしては、"似たような"ベクトル同士が(1次元や2次元の)マップ上において"近傍に"配置されるように仕分けして…

pythonでスパイキングニューロンのシミュレーション (Brianについて)

スパイキングニューロンのシミュレータの一つBrianを紹介したい。 http://briansimulator.org/Brian以外にもニューロンのシミュレータにはいくつか存在する。 特にPythonでコーディングできるものに限定すれば、 有名なものにNEURON。他にも、NEST(pyNEST),P…

pythonでマンホイットニーのU検定

pythonでマンホイットニーのU検定する方法。 scipyを使う。 from scipy import stats stats.mannwhitneyu(x, y, use_continuity=True, alternative=None) alternativeは'less','greater','two-sided'。Noneの時は'two-sided' p値は返り値のpvalueで取れる。 …

ubuntuの見た目をwindows10風にカスタマイズする [Ubuntu16.04LTS]

Linuxを使っているとWinowsが恋しくなる時があるはずです、よね。 僕はどうしてもUbuntuの安っぽいアイコンが好きになれない。 そこでubuntuをWindows10風にアレンジすることにした。 gnome-tweak-toolをインストール 外観を変更するアプリケーション。色々…

VAIO S1311でBIOS起動方法&使用感

VAIOにVMwareを入れてubuntuを動かしたかったが、 VMPlayerを起動しようとすると "Intel VT-x に対応していますが、Intel VT-x は無効になっています。" と怒られてしまった。 VAIOでBIOSに入ろうと思ったのだが入り方がわからない!BIOSに入れたはいいが何…

pyxファイルとは(cythonについて)

他人のソースを動かしていると、.pyxというファイルがあって、これ何?と思ったから調べてみた。.pyxの拡張子とは、PythonをC言語ライクにコンパイルするCythonというメタ言語のスクリプトファイルのこと。つまり、Cythonっていうほぼpythonみたいな言語があ…

pythonで進捗バーを表示してみた

※python2.7系ですpythonで普通にprint文を書くと for i in range(5): print i 0 1 2 3 4 となりコンソールに上書きされずに改行されてプリントされていく。処理中のファイル名や内部変数の値などをリアルタイムで見ていきたい時は改行せず上書きしたほうが見…