Remrinのpython攻略日記

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

python

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…

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)} # …

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 データフレームを作る…

map(), filter()

pythonのmap(), filter()の使い方について。 map() Definition : map(func, *iterables) リストなどの全要素に関数を適用し、イテレータを作る。 もとのリストは保存され、非破壊的。 mapオブジェクトを生成するので、中身を見たければlist化など。 list1 = …

バーンスレイのシダ

○バーンスレイのシダ 4種類の変換をそれぞれ、85%、7%、7%、1%の確率で選んでいきます。 # -*- coding: utf-8 -*- import numpy as np import matplotlib.pyplot as plt def transform1(p): x, y = p[0], p[1] x1 = 0.85*x + 0.04*y y1 = -0.04*x + 0.85…

matplotlibでアニメーション

matplotlibでアニメーションを作ります。 # -*- coding: utf-8 -*- import matplotlib.pyplot as plt import matplotlib.animation as ani def create_circle(): c1 = plt.Circle((0, 0), 0.5) return c1 def update_radius(i, c1): # i:フレーム番号 plt.cl…

matplotlibで図形

matplotlibで図形を描く方法。 plot()関数が呼ばれると背後でfigure()が呼ばれ、続いてaxes()が呼ばれてfigureの中に軸をつくる。 plot()関数を呼ばずにfigure()やaxes()で図、軸を設定できる。 import matplotlib.pyplot as plt c1 = plt.Circle((0, 0), ra…

csvライブラリ

csvモジュールの使い方について。 以下の内容のtest.csvを準備しました。 1,20 2,30 3,40 4,50 ○csvファイルの読み取り (1)各行はリストとして読み込まれる。 import csv with open("test.csv", "r") as f: data = csv.reader(f) print(data) <_csv.reader object at 0x...> for i in d</_csv.reader>…

matplotlibの色名一覧

matplotlibの色名一覧 この色名一覧はpythonで書かれていて、同じページにコードも載っています。 あとでゆっくりコードを読んでみようと思います。 # coding: utf-8 from __future__ import division import matplotlib.pyplot as plt from matplotlib impo…

matplotlibで散布図

matplotlibで散布図を描く方法について。 Definition : plt.scatter( x, y, # x座標, y座標の配列 s=None, # マーカーのサイズ c=None, # マーカーの色 marker=None, # マーカーの形 cmap=None, # cがfloat型のときのカラーマップ norm=None, # cをfloat型配…

エラー

構文解釈時のよくあるエラーについて。 AttributeError: ・'~' object has no attribute '~' 属性名、メソッド名などが間違っている。存在しないのに呼び出した。 lとrや大文字小文字などスペルミスを見直す。 ドットを打ち込んで属性の候補一覧からTAB補…

pythonで統計

pythonを使って統計処理をします。 ○1変数の基本統計量 要素数 平均mean 範囲 最頻値mode 中央値median 分散variance 標準偏差standard deviation # -*- coding: utf-8 -*- from collections import Counter def mean(seq): return sum(seq) / len(seq) # 平…

pythonで円周率を求める

pythonで円周率を求めるアルゴリズム ○ライプニッツの方法 収束が遅い。 100万回計算して、6桁くらい。 pi4 = 0 for i in range(1000000): pi4 += (1 / (i * 4 + 1) - 1 / (i * 4 + 3)) print(pi4 * 4) # 3.141592153589902 ○区分求積を使う。 収束が速い。 …

pythonの集合型 set

pythonの集合型setの使い方について。 ・重複のない配列。 ・順序がないのでs[1]のようなインデックス指定ができない。 ・inメソッドによる検索が高速 ○生成 # coding: utf-8 s1 = set() # 空のset print(s1) # set() print(type(s1)) # <class 'set'> s2 = {1, 1, 2, 2, </class>…

はてなブログ用の表組みの自動生成

少量のデータなら手打ちでいいですが、大量の表形式のデータをブログに書く手間を省きたいものです。ということで、サンプルです。 ○例1 百人一首のを収めたテキストファイルから、はてなブログ用の表組みを出力します。 ここのページにデータがあります。 …

pandasの使い方(4)ファイルの読み込み

pandasを利用したファイルの読み込みについて。 HTMLの表組み(TABLE)をDataFrameオブジェクトのリストで取得。 Definition : read_html(io, match='.+', flavor=None, header=None, index_col=None, skiprows=None, attrs=None, parse_dates=False, tuplei…