python

Pythonの純粋仮想関数は引数の数適当に変えて実装してもOK

掲題の件、そういいうことです。 例えば適当に get() メソッドの引数を追加して実装しても from abc import ABCMeta, abstractmethod class Hoge(metaclass=ABCMeta): @abstractmethod def get(self): pass class Moge(Hoge): def get(self, x = None, y = N…

set/list/dictあたりは内部で __str__ではなく __repr__ を呼んでいるっぽい

掲題の件、そういうことです。 __str__() だけ定義しておくと class Hoge(): def __init__(self, x): self._x = x def __str__(self): return "Hoge({})".format(self._x) ちゃんと出てくれない。 > x = {Hoge(1), Hoge(2)} > print(x) {<__main__.Hoge object at 0x109fb7880>, <__main__.Hoge object at 0x109fb78e0>} 一方、 __repr__</__main__.hoge></__main__.hoge>…

Noneと''を除去したい

filterにNone食わせれば良いみたい >>> x = ['', None, 'Hoge', 'Hage'] >>> list(filter(None, x)) ['Hoge', 'Hage']

PythonのRequestsライブラリのデフォルトの証明書のパス

ここで requests/utils.py at c501ec986daa4961cd9dee370b5d45ff2e524b37 · requests/requests · GitHub 設定されてて、こいつは調べると requests/certs.py at c501ec986daa4961cd9dee370b5d45ff2e524b37 · requests/requests · GitHub にあるように certif…

ワンライナー(1行)でYAMLを捌いてpretty print

こんなん python -c 'import yaml,sys;print(yaml.dump(yaml.load(sys.stdin)))' < hoge.yml

適当なデータをsklearnでカーネル密度推定する

クロスバリデーション付きでどう書くのが楽かなと考えた。 私なりの答えはこんなん。ライブラリのimport設定は以下で使うものもまとめて書いちゃってる。 import numpy as np import matplotlib.pyplot as plt from scipy import integrate from sklearn.mod…

R・Pythonのロジスティック回帰結果が一致することを確認

ちゃんと一致するのかなって不安になったので適当なデータでチェック。 元になるデータはこの記事のものをそのまま流用している&何なのかは知らん。 Python編 その1 Pythonのコード import pandas as pd import sklearn.linear_model df = pd.read_csv("ht…

Pandasの参照先が変わるタイミング

よくわからんので、とりあえずメモ以下 import pandas as pd def hoge(x): x.iloc[1] = 100 df = pd.DataFrame({'A': range(3)}) hoge(df) df を実行すると A 0 0 1 100 2 2となるので、hoge関数にはdfのポインタ(参照)が渡されているのがわかる、これはい…

行・列のIndexを指定した上でpandas.DataFrameを作る

Indexの指定がめんどくせぇわ… In [1]: import pandas as pd In [2]: df = pd.DataFrame([ ...: [0.00, 0.03, 0.000], ...: [0.01, 0.04, 0.005], ...: [0.02, 0.05, 0.010] ...: ], ...: index=pd.Index([0, 1, 2], name='hoge'), ...: columns=pd.Index(['…

numpy.arrayも基本シャロー・コピー

まじですぐ忘れる。 >>> import numpy as np >>> x = np.array([1,2,3]) >>> y = x >>> y[1] = 999 >>> print(x) [ 1 999 3]

関数の中身を見る(Rで言うコンソールで関数名直打ち)

関数名を評価すると中身が飛び出してくるRに慣れすぎててPythonでどうすんのかわかんなかったのでメモ。 inspectというパッケージのgetsourceメソッドを使えばいいらしい。 >>> import inspect >>> def hoge(x): ... print("Do some awesome things.") ... r…

scikit-learnで非負値行列因子分解(NMF)

- http://scikit-learn.org/stable/modules/generated/sklearn.decomposition.NMF.htmlを見たりググった日本語での検索結果でも何がどうなってるのかよくわからんので、ちゃんと試したメモ。非負値行列因子分解自体は要するに、ある行列MをM≒WHと近似した時…

Jupyter Notebookにloggingの結果を表示させたい

色々とStack overflow漁って調べた結果、とりあえずこれで動いた。 import sys import logging logger = logging.getLogger() handler = logging.StreamHandler(sys.stdout) handler.setLevel(logging.INFO) logger.addHandler(handler) logger.setLevel(log…

Jupyterで表示されるpd.DataFrameをテーブルっぽく表示させる

Jupyterの最期の評価値(pd.DataFrame)と同じように表を出力させたい時。 適当なpd.DataFrameをdfとして from IPython.display import display, HTML display(HTML(df.to_html())) こう。(追記) ・・・と思ったら display(df) で良いみたい。

MD5(Message Digest 5)のハッシュ値を計算したい時にはmd5ライブラリ

http://d.hatena.ne.jp/teramonagi/20150620/1434774864 と同じ話をPythonでやりたかった。 md5ライブラリを使えばよい&Rと答えを合わせるためには`serialize=FALSE`せんといかん点に注意。 seriarize引数の説明は A logical variable indicating whether t…

Python3系だと、zip関数の返り値はlazyなzipオブジェクトなんだねぇ

遅延評価好きだけど2系と違うのでハマった。 x = [(1,2), (3,4), (8,9)] print(zip(*x)) print(list(zip(*x))) 出力 <zip object at 0xb73409ac> [(1, 3, 8), (2, 4, 9)]</zip>

オブジェクトのシリアライズはpickle

3系でやってる。 import pickle x = (1,2,3) y = [777] pickle.dump((x,y), open('hoge', 'wb')) X, Y = pickle.load(open('hoge', 'rb')) X, Y ((1, 2, 3), [777])

変数のスコープがよくわからない

とりあえずハマった例だけメモっておく。 (for|リスト内包表記)内だけの変数…とはならない i = 0 for j in range(10): a = [x + i for i, x in enumerate([1,2,3,4,5])] print i これ、0になると思って実行したら 4となって、あばばばばばとなった。 〜追記〜…

boxplotのY軸のレンジを制御する

matplotlibのboxplotを使う際のY軸の制御はylim関数でOKだった。 以下の例では、Y軸の範囲を[-1, 2]として、適当な数値(0〜1の乱数10個)をboxplotで表示させてる。 # -*- coding: utf-8 -*- import numpy as np import matplotlib.pyplot as plt #適当なデ…

scikit-learnでサポートベクトル回帰、及びそのパラメーター推計 with クロスバリデーションやってみる

サポートベクトル回帰(Support Vector Regression, SVR)の理論が大体脳内整理出来たので、実践もしたいぞと、そしてちょいとpythonを使う別件があるので、慣れの意味も込めてR言語ではなくpythonとその機械学習ライブラリであるscikit-learnを使ってやるぞと…

雑多メモ

物忘れがひどいので、少なくとも自分がよく使う奴だけでも。 主にnumpyに絡む操作なので import numpy as np は既に実行した上での記述で書く。 slice関数:配列を扱うためのインデックスを抽象的に表現 例えば以下のように書くと1から無限(None指定)まで2お…

デコレーターがよくわからんのでワチャワチャ書く

掲題の件、そういう事です。 # -*- coding: utf-8 -*- def show_message(f): def wrapper(): print("==== function call ====") f() return wrapper def spam1(): return 1 @show_message def spam2(): return 2 if __name__ == "__main__": print(spam1()) …

お勉強したことメモ

主に私が良く使うC++と違う点についてハマった点とか、新しく学んだ事をつらつらとメモって置く。 結局、プロパティ(property)はディスクリプタ型の一部つーことらしい。 __new__は__init__(コンストラクタ)より先に呼ばれる 親クラスのコンストラクタは…

レプリカ交換モンテカルロ法(パラレル・テンパリング)による混合ガウス分布に従う乱数の生成

マルコフ連鎖モンテカルロ法(メトロポリス法)による混合ガウス分布に従う乱数の生成 - My Life as a Mock Quant でやった内容の欠点とそれを補うためにもうちょっと高尚な手法である拡張アンサンブル法の1つ「レプリカ交換モンテカルロ法」を用いてやりま…

マルコフ連鎖モンテカルロ法(メトロポリス法)による混合ガウス分布に従う乱数の生成

平均(1,1),(-1,-1)となるような2つのガウシアンを3:7の割合で混ぜ合わせた2次元混合ガウス分布に従う乱数をマルコフ連鎖モンテカルロ法の1つであるメトロポリス法で生成するコードを書いた。 実行すると↓のように混合比率から若干(-1,-1)のガウシアンの方…

EMアルゴリズムによる混合分布のパラメーター推定の解析計算&実装例 from 「Rによるモンテカルロ法入門」

問題設定 R言語の書籍「Rによるモンテカルロ法入門」 のEMアルゴリズムに関連した「練習問題5.14」をpthonの練習がてらEMアルゴリズム構築までの数式もメモりながら解いてみたというお話。問題設定としては という混合分布(分布から確率、分布から確率でサン…

モンテカルロ法で条件付期待値計算をする際の試行錯誤−1

問題設定 ここではある時点における、適当な確率変数の条件付期待値を計算する事を考えたい。例えば適当な確率空間を設定し、以下のような条件付き期待値の計算を行うとする*1。 ・・・(A) ここでは確率測度の下で以下の確率微分方程式に従うものとしている…

幾何ブラウン運動に従うモンテカルロのパスを作る

numpyを使って結構美しく書けたのでメモ。結果はmatplotlibを使って描画。 ↓幾何ブラウン運動に従うモンテカルロの生成コード # -*- coding: utf-8 -*- import numpy as np import matplotlib.pyplot as plt #株価の確率微分方程式に従うサンプルパスを生成 …

最小二乗モンテカルロ( Least Squares Monte Carlo)法でアメリカンオプションの評価

Longstaff and Schwartzが開発した最小二乗モンテカルロ法( Least Squares Monte Carlo)でアメリカンオプションのプライスを出してみたというお話。 numpy使えば楽に書けるかなと思ったけど意外とめんどかった。 答えはWolfram Alphaのとチェック。だいたい…

論文「Determining the density of states for classical statistical models」の実装

またまた友人からモンテカルロ法系の論文を教えてもらったので読んで実装。 その論文は 'Determining the density of states for classical statistical models: A random walk algorithm to produce a flat histogram, Phys. Rev. E 64, 056101 (2001)' こ…