Remrinのpython攻略日記

python3に入門しました。python3についてあれこれとサンプルコードとか。

ニュートン法

ニュートン法で平方根を求める。 ・まずは√2 def a(x): return (x**2 + 2) / (2 * x) x = 2 # 初期値(0以外の値) for i in range(6): x = a(x) print(x) # 1.5 # 1.4166666666666667 # 1.4142156862745099 # 1.4142135623746899 # 1.414213562373095 # 1.4…

ビット操作

pythonのビット操作について ビットand, or, xor, not & :ビットand | :ビットor ^ :ビットxor ~ :ビットnot(反転) print(bin(0b0101 & 0b1100)) # 0b100 print(5 & 12) # 4 print(bin(0b0101 | 0b1100)) # 0b1101 print(5 | 12) # 13 print(bin(0b0101 ^ 0b…

scikit-learn 最小二乗法

scikit-learnで最小二乗法 y=sin(x)に誤差をランダムで付加した100個のデータを準備し、 学習用:テスト用=8:2に分けて実行。 import numpy as np import matplotlib.pyplot as plt #sklearn.cross_validationは非推奨、次のヴァージョンで廃止予定 #sklea…

遺伝的アルゴリズム

遺伝的アルゴリズムの例 ①初期の遺伝子プール(個体群)を決める ②一定確率で遺伝子を交差させ、個体数を2倍にする ③一定確率で突然変異を起こす ④重みづけをして評価し、生き残る個体を選ぶ ⑤一定回数または目標値に達するまで②に戻る 16桁の2進数の数を正解…

matplotlib グラフの設定

matplotlibのグラフの設定について 日本語の表示 日本語を表示する場合は、表示するごとにfontproperties = fpをセットする。 from matplotlib.font_manager import FontProperties fp = FontProperties(fname='C:\WINDOWS\Fonts\msgothic.ttc', size=14) pl…

例外処理

pythonの例外処理について。 例外が発生すると例外オブジェクトを作る。 すべての例外オブジェクトはExceptionクラスを継承している。 基本形は try: 処理 except: 例外発生時の処理 例外処理の書式 except すべての例外を捕捉 except 例外クラス名 捕捉する…

モジュール

1つのモジュールは~.pyという1つのスクリプトファイルに相当する。 __name__ スクリプトファイルは単独のプログラムとしても動作するし、他のプログラムやモジュールから呼び出して使うこともできる。 ・__name__属性 単独のプログラムとして起動したときは…

クラス

クラスについて。 クラスとは クラス…オブジェクトの設計図のようなもの。 データとメソッドを持つ。 インスタンス…設計図から作られた実体。オブジェクト ・クラス名は大文字で始める。 class Color_test(): pass a = Color_test() print(a) # <__main__.Color_test object at 0x....> a.red = 255</__main__.color_test>…

decimal

decimalモジュールのDecimalクラスは数値演算での誤差を回避するクラス。 小数の計算では誤差が生じる。 for i in range(10): print(i * 0.1) # 0.0 # 0.1 # 0.2 # 0.30000000000000004 # 0.4 # 0.5 # 0.6000000000000001 # 0.7000000000000001 # 0.8 # 0.9 …

高階関数、デコレータ

高階関数...関数を関数に渡したり、戻り値として関数を返したり。 関数に機能を追加できたりする。 print(int(3.14)) # 3 print(int("100", 3)) # 9 :3進法の100は10進法の9 def arg_check(func, arg): print(arg) return func(arg) print(arg_check(int, 3.…

イテレータ

イテレータとは: 1. シーケンスなどの要素を次々取り出す。→ __next__ 2. 終わったら知らせる。 → StopIteration forループや内包表記では内部でiter()関数が呼ばれ、 順に「__next__」をしていき、最後にStopIterationで停止するので、 __next__やStop…

テストデータ(8) 麻雀の役

麻雀の役について 麻雀の役名 英語名は複数の言い方があるようなので、一例 役名 英名 翻 鳴き 形で決まる リーチ Ready 1 0 × 一発 One_shot 1 0 × 面前ツモ Self_pick 1 0 × 役牌 Honor_tiles 1 1 △ タンヤオ All_simples 1 0 ○ 平和 No-points_hand 1 0 ×…

bytes, bytearray

ググってみると、文字列に関する型というよりは、バイナリデータを扱う型でした。 まとめてバイナリシーケンスとも呼ばれます。 0~255の整数のみが要素になります。 bytes イミュータブル(値の変更不可) bytearray ミュータブル(値の変更可能) bytes型 …

関数

関数についての注意事項など。 docstring 関数ブロックの最初に文字列リテラルを書くと、doctrrintとして扱われる。 ここに関数の説明などと記入できる。 引数 ・引数は参照渡しになるので、リスト型などmutableな変数を渡すと、 もとの変数も関数内の操作で…

ループ処理

ループ処理について。 for イテレータ(シーケンスなど)を添える while イテレータの代わりに条件式。while True, while 1という形をよく見る break ブロックから抜ける continue それ以降のループブロックを実行せず、最初に戻る else forブロックやwhileブ…

3つのif

ifの使い方について。 「1000未満の3または5の倍数の和を求める」場合 ○条件分岐 limit = 1000 result = 0 for i in range(limit): if i%3 == 0 or i%5 ==0: result += i print(result) ○内包表記 limit = 1000 result = sum([x for x in range(limit) if x%…

NumPyの使い方(19) 数え上げ

NumPyの数え上げ(要素のカウント)について。 0,1のみのデータから1や0の個数を数える方法 import numpy as np a1 = np.array([0, 1, 1, 0, 1, 0, 0, 0]) # 1の個数をカウントする例 print(np.count_nonzero(a1)) # 3 print(a1.sum()) # 3 print(len(np.where…

素数

素数について。 素数生成のジェネレータ def gen2(start=2, stop=1000000): pr = max(1, start - 1) while True: while pr < stop: pr += 1 if all(pr%x != 0 for x in range(2, int(pr**0.5) + 1)): break yield pr g = gen2() for i in range(10): print(n…

ジェネレータ

ジェネレータについて。 通常の関数のreturnの部分をyieldとするとジェネレータを自作できる。 偶数を生成するジェネレータ def gene(): even = 0 while True: yield even even += 2 e = gene() for i in range(5): print(next(e)) 素数を生成するジェネレー…

PILの使い方(1)

PIL(Python Imaging Library)の使い方について。 画像の読み込み img = Image.open("filepass") のように、ファイルを読み込む。 この時点では参照されているだけで、必要になってからデータを読み込む。 下の例では作業ディレクトリの下のdataフォルダに該…

フィボナッチ数列

フィボナッチ数列について。 def fib(n): a, b = 0, 1 for i in range(n): a, b = b, a + b return b print([fib(i) for i in range(10)]) # [1, 1, 2, 3, 5, 8, 13, 21, 34, 55] メモ化した場合 fib_memo = {} def fib(n): if n < 3: return 1 if n not in …

pandasの使い方(3) インデックス

pandasのインデックスオブジェクトについて。行や列のインデックスは「インデックスオブジェクト」として保持。 行:DataFrame.index 列:DataFrame.columns import numpy as np import pandas as pd data = {"year": [2010, 2011, 2012, 2013], "pref":["千…

テストデータ(7) 東京の年平均気温

東京の平均気温(気象庁のサイトより) # coding: utf-8 import pandas as pd url = 'http://python-remrin.hatenadiary.jp/entry/2017/05/18/142423' ## DataFrameのリストを得る。header=0のオプション指定で、最初の行をheader扱い。 fetched = pd.io.htm…

最小二乗法

最小二乗法について。 (2, 3), (4, 7), (9, 11)の3点をデータとして、最小二乗法を1次式で行う場合。 とすると、 これの最小値を求めることになり、偏微分をして となるベクトルが係数ベクトルとなる。 # coding: utf-8 import numpy as np import matplotli…

NumPyの使い方(18) 次元操作

NumPyの次元操作について 次元の増減 保持 削減 増加 reshape ○ ○ ○ resize ○ ○ ○ flatten ○ × rabel ○ × any, all × ○ × sort ○ △ × axis略で1d スライス ○ × × インデックス × ○ × ファンシーインデックス ○ ○ × take ○ △ × axis略で1d mean, sum × ○ × mi…

NumPyの使い方(17) 構造化配列

NumPyの構造化配列(structured array)について。 dtypeを自分で設定して、異なる型の変数を織り込める。 フィールド名で要素を参照できる。 dtype = [("x", int), ("y", float)] a1 = np.array([(1, 2), (3, 4), (5, 6)], dtype=dtype) print(a1) # [(1, 2.0…

麻雀(1)

何年かかるかわかりませんがプログラムの練習で麻雀を作ってみようと思います。 m 萬子 0-8 p 筒子 9-17 s 索子 18-26 h 字牌 東:27~中:33 pair 対子 triplet 暗刻 Triplet 明刻 seq 順子 kan 暗槓 Kan 明槓 prevailing_wind 場風 seat_wind 自風 dealer …

NumPyの使い方(16) 行列matrix

NumPyのmatrixについて。 class 種類 次元 ndarray 配列 次元は自由 matrix 行列 2次元に固定 ndarrayでは行列の積を表すときにdot()を呼びだすが、 matrixでは「*」や「**」で行列の積などを表せる。 その他の使い方はndarrayと同様のようです。 import num…

NumPyの使い方(15) ブロードキャスト

NumPyのブロードキャストについて。 配列の次元、大きさ(要素数)などが異なっていても配列どうしやスカラーの演算ができる。 ブロードキャストができるのは、2つの配列のshapeを最終軸から順に比較していき、同じ大きさか、一方が1であるかチェック。 1つ…

NumPyの使い方(14) 繰り返し

NumPyの繰り返しrepeat()、tile()について。 np.repeat() 配列の要素を繰り返す。 axisを省略すると1次元にflattenされる。 import numpy as np a1 = np.arange(4) print(a1.repeat(2)) # [0 0 1 1 2 2 3 3] print(a1.repeat([3, 2, 1, 0])) # [0 0 0 1 1 2]…