Machine Morning

機械学習やWebについて学んだことを記録しています。

プログラミング

ビットフラグの判定

競プロの問題でビットフラグの判定の問題があった。 atcoder.jp ビットフラグの判定は初見だったので各桁が0か1かを文字列から取り出して判定したが、他の人の解答を見るとどうも自分の書き方はスマートではない。 ということでスマートなビットフラグの判定…

Pythonでリストを反転する

>>> [1, 2, 3, 4][::-1] [4, 3, 2, 1] >>> "apple"[::-1] 'elppa' リストまたは文字列を[::-1]すると反転する。

Pythonで桁数を指定して0埋めする方法

5桁の数字で余った位を0埋めする場合 例: 123 を 00123と表示する。 >>> print("{:05d}.format(123)") 00123 >>> print("{:05d}".format(12345)) 12345 >>> print("{:05d}".format(123456)) 123456 上は0埋め、5桁、decimal(10進数)。 4桁なら"{:04d}".forma…

Pythonのif __name__ == "__main__":とは

if __name__ == "__main__": __name__はモジュールの名前が入っている特殊な変数で、通常import hogeをしてモジュールを取り込むと、そのモジュールの__name__はhogeとなる。 例えば、 import numpy as np print(np.__name__) >>> numpy しかし、python hoge…

最小公倍数と最大公約数を求めるアルゴリズム

最小公倍数は最大公約数を使って簡単に求めることができるので、まず最大公約数を求める。 最大公約数 最大公約数を求める最も有名なアルゴリズムはユークリッドの互除法である。 wikipediaから引用すると、 2つの自然数a, b (a >= b)について、aのbによる剰…

Pythonで変数を動的に生成する

使う機会があるのかわからないが、変数を動的に生成する方法を紹介する。 基本的に辞書、または変数名が数字でいい場合は配列の方が使い勝手はよい。 for i in range(5): exec("var_{} = {}".format(i, i)) print(var_0) => 0 print(var_1) => 1 print(var_2…

pickle

Pythonのpickleはプログラム実行中にできたオブジェクトをバイト列にしてファイルとして保存する。このオブジェクトをバイト列にする作業を直列化(serialize)、バイト型列のファイルを元のデータ型でオブジェクトに戻す作業を非直列化(deserialiize)とい…

疑似乱数のseedとは

擬似乱数を生成する際にseedを指定することができる。実は疑似乱数はあくまで'疑似'乱数なので、再現性のある乱数として利用することが可能だ。その再現性のある乱数を生成する際に指定するのがseedである。Pythonのrandomモジュールではrandom.seed()で指定…

matplotlibは一つのセルで完結させるべき...?

Google Colaboratory上でmatplolibでプロットしていたら、ハマったポイント。 複数セルにまたがって書くと初期化される? pltのインスタンスを作成したら、plt.show()するまでセルを変えない方が良い? Plot disappears after executing cell second time · …

Colaboratoryでグラフをファイルとして保存する

Google Colaboratoryでプロットしたグラフを保存するにはplt.savefig()だけではできない。 import matplotlib.pyplot as plt from google.colab import files # グラフを作成したら plt.savefig("file_name") files.download("file_name") これでローカルの…

yieldとは

yieldを理解するために、まずはIterablesについて解説する。 Iterables listを作成すると要素を一つずつ読むことができる。この要素を一つずつ読み出す作業をiterationと呼ぶ。 >>> sample_list = [1, 2, 3] >>> for i in sample_list: ... print(i) 1 2 3 s…

Spark入門2

Sparkのインストール SparkはJavaのバーチャルマシン(JVM)上で動くので、JVMを入手する。JVMはJava SE Development Kit(JDK)をインストールすることで手に入る。2018年8月21日現在ではバージョン10が最新だ。以下のリンクから自分のマシンに合ったものを…

Spark入門

Sparkのコアのデータ構造は(RDD: Resilient Distributed Dataset)である。pandasのDataFrameのようにデータセットをRDDにロードして、メソッドでデータを扱う。 PythonでSparkを使うにはPySparkを使う。SparkはJavaでできているので Py4Jによって、Javaの…

purgeとは

purgeコマンドはMacのメモリを解放するコマンドである。 buffer cacheとpage cache page cacheはデータの読み書きを高速化するためにデータをページとして一時的にメインメモリ上に保存することである。 buffer cacheは記憶階層やデータをやり取りする装置や…

Google ColaboratryでGoogle Driveからデータセットをインポートする

Google ColaboratoryにはPythonでGoogle Driveを扱うためのPyDriveが標準で入っていないので、初めに!pip install -U PyDriveする。 そしたら必要なライブラリを読み込む。 !pip install -U PyDrive from pydrive.auth import GoogleAuth from pydrive.drive…

表示を高速化するjsファイルの読み込み方

サードパーティスクリプトとは 外部から提供されている機能のスクリプトのこと。例として以下のようなものがあげられる。 TwitterやFacebookなどのSNSでシェアするボタン YouTubeのような動画の埋め込み 広告系のiframe 解析やメトリクスツール A/Bテスト デ…

nbytesとgetsizeofの値が違う件について

Pythonのメモリの使用量を調べるためにnumpyのndarrayの.nbytesとsysモジュールのgetsizeof()を使ってみたら返って来る値が違った。 ndarray.nbytes() import sys sys.getsizeof(object) .nbytesはオブジェクトの中身だけ、getsizeof()はオブジェクトそのも…

sklearnのtransformとfit_transform

fitは与えられたデータセットの統計量を算出し、transformはデータセットの統計量を元にデータを変換(標準化、正規化)する。 fit_transformはfitとtransformを両方順に行う。 訓練用データには統計量を算出するfit_transform、テスト用データには訓練用デ…

numpyで逆行列(inverse matrix)を求める

from numpy.linalg import inv a = np.array([[1., 2.], [3., 4.]]) ainv = inv(a) 参考 https://docs.scipy.org/doc/numpy-1.14.0/reference/generated/numpy.linalg.inv.html