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]…

Numpyの使い方(13) 結合・分割

Numpyの配列の結合・分割について。 np.concatenate() 2個以上の配列を軸指定して結合する。 軸指定オプションのaxisはデフォルトが0 マスクは保存されない。(マスクについては別の記事で) import numpy as np a1 = np.array([[1, 2, 3], [4, 5, 6]]) a2 …

NumPyの使い方(12) 乱数、random

乱数を発生させるライブラリは主に2つ。randomライブラリとNumPyのrandom 2つのライブラリの一番の違いは乱数の発生個数。 乱数の発生個数 randomモジュール :乱数1個 numpyは配列の形をsize=~の形のキーワード引数で乱数の個数を指定できる。 size 省略…

NumPyの使い方(11) 行列計算

NumPyの行列計算について 内積 内積はnp.dot()関数を使うかarray.dot()メソッドを使うか。 内積は順序によって結果が異なる。 import numpy as np a1 = np.ones([2, 2], dtype=int) a2 = np.arange(1, 5).reshape(2, 2) print(a1) # [[1 1] # [1 1]] print(a…

NumPyの使い方(10) 集合関数

NumPyの集合関数について。 python標準のset型も参照。 1次元配列を対象とした集合関数 unique(x) 重複を除外し、ソートした配列 in1d(x,y) xの各要素がyに存在するか intersect1d(x, ) 共通部分。積集合 union1d(x, y) 和集合 setdiff1d(x, y) 差集合 setxo…

NumPyの使い方(9) 並べ替えsortなど

NumPyのsortについて。 sort()メソッド 内部で配列をソート。返り値はNone np.sort()関数 ソート済み配列を返す。元の配列は保存。 # coding: utf-8 import numpy as np np.random.seed(1) a1 = np.random.randint(0, 100, 10) print(a1) # [37 12 72 9 75 5…

NumPyの使い方(8) 真偽値

NumPyの真偽値について。 ・TrueとFalse python標準のTrue, Falseでは False 数値のゼロ、空文字列、空配列、False True 他すべて TrueがFalse以外ということは、 負の値、NaN、infもTrueとなる。・条件がTrueとなる要素の確認 import numpy as np a1 = np.a…

boolと条件

真偽値boolや条件などについて。 真偽値bool ・True, Falseの2つの値のみ。 ・True,=1, False=0で変更できない。(python2では変更できた) True = 0 # SyntaxError: can't assign to keyword False 数値のゼロ、空文字列、空配列、False True 他すべて ・必要…

NumPyの使い方(7) 統計関数、最大・最小

NumPyの統計関数の使い方 ndarray配列全体、あるいは特定の軸についての統計処理をする。 sumやmeanなどの集計処理は次元削減になる。 axis=0 縦方向にreduce axis=1 横方向にredece sum 和。 長さ0の配列では0を返す。 mean 平均。長さ0の配列ではNaNを返す…

NumPyの使い方(6) 条件制御

NumPyの条件制御について。 if~elseで条件分岐をするとき a = 5 if a >= 0: b = 1 else: b = -1 と書けますが、これを3項演算子を使い以下のようにも書けます。 b = 1 if a >= 0 else -1 似たような動作を組み込みのリスト型で行うとき、 例えば、Trueなら…

NumPyの使い方(5) ベクトル演算とユニバーサル関数

ベクトル演算とユニバーサル関数について。 ベクトル演算 ndarrayと数値(スカラー)の計算は全要素対象で、forループを使わない。 ndarrayどうしの演算は対応する位置の要素どうしで計算。 [注意]ndarray * ndarrayは内積や外積にはならない。 import numpy a…

Project Euler

Project Euler problem #001 Multiples of 3 and 5 If we list all the natural numbers below 10 that are multiples of 3 or 5, we get 3, 5, 6 and 9. The sum of these multiples is 23. Find the sum of all the multiples of 3 or 5 below 1000. 問題1…

テストデータ(6) メフィスト賞

メフィスト賞 import pandas as pd url = 'http://python-remrin.hatenadiary.jp/entry/2017/05/10/222443' ## DataFrameのリストを得る。header=0のオプション指定で、最初の行をheader扱い。 fetched = pd.io.html.read_html(url) print(len(fetched)) # l…

テストデータ(5) 直木賞

直木賞 import pandas as pd url = 'http://python-remrin.hatenadiary.jp/entry/2017/05/10/215715' ## DataFrameのリストを得る。header=0のオプション指定で、最初の行をheader扱い fetched = pd.io.html.read_html(url) print(len(fetched)) # 1 listの…

NumPyの使い方(4) 形状変換と転置

NumPyの形状変換と転置について。 reshape()、resize() タプルでshapeを指定して形状を変換する。 変換前後で全要素数が一致しないときはValueError -1を指定した軸はNumPyが自動で判断。 もとの配列を参照を得るので、値変更は元の配列に及ぶ。 np.resize()…

NumPyの使い方(3) インデックス、スライス

NumPyのインデックス、スライスについて。 1次元配列のインデックス、スライス 値の参照:python組み込みのlistと同様 値の代入:まとめて同じ値が代入(ブロードキャスト) import numpy as np # 値の参照、代入 a1 = np.arange(1, 10) print(a1) # [1 2 3…

NumPyの使い方(2) データ型

NumPyのデータ型 dtype 略号 種類 int32 i, i4 符号あり整数 32bit unit32 I, u4 符号なし整数 32bit float32 f, f4 小数 64bit complex64 F, c8 複素数 128bit bool 真偽値 True, False object O pythonオブジェクト string バイト文字列型 固定長。5文字な…

NumPyの使い方(1) 配列の生成

NumPyの使い方について。 NumPyとは ・NumPy: numerical pythonの略。科学技術計算の基盤となるパッケージ ・多次元配列オブジェクト ndaaryay(N-dimensional array) ・高速演算 ・ファイルの読み書き ・線形代数、フーリエ変換、乱数 ・C、C++、FORTRANのコ…

内包表記

内包表記(comprehension)の使い方。 map()やfilter()に近い使い方を高速に実行できる表記方法。 l2 = [x*2 for x in range(4)] # リスト内包表記 [0, 2, 4, 6] g = (x*2 for x in range(4)) # ジェネレータ式 0, 2, 4,... d2 = {x:x*2 for x in range(4)} # …

テストデータ(4) 常用漢字

常用漢字のテストデータです。 data = [""]*7 #小1 data[0] = """ 一右雨円王音下火花貝学気九休玉金空月犬見五口校左三山子四糸字耳七 車手十出女小上森人水正生青夕石赤千川先早草足村大男竹中虫町天田土 二日入年白八百文木本名目立力林六""" #小2 data[1…

pandasの使い方(2) DataFrameの生成

データフレームを作る(1) numpyの配列から作る。 import numpy as np import pandas as pd a = np.random.randint(1, 100, (3, 2)) frame = pd.DataFrame(a, columns=["a", "b"]) print(frame) # a b # 0 85 80 # 1 85 10 # 2 17 38 データフレームを作る…