- 追加された行はこの色です。
- 削除された行はこの色です。
[[プログラミング]]
*概要 [#w618884a]
-つらいけどpython3の勉強
*目次 [#a5607792]
#contents
*下位ページ [#ydce84f6]
-[[Seaborn]]
*概要 [#zf7c02c1]
-最近流行ってるので習得しなければならない…
*pip3について [#of44a678]
-グローバルに入れるには、必ず使うバージョンまで指定しないといけない
sudo python3.5 -m pip install numpy
*環境構築 [#mb27dc33]
-鬼門
sudo apt-get -y install python3-dev
python -V
python3 -V #バージョンを確認。3.5だとする。
sudo apt-get install python3.5-dev #ここのバージョンとして3.5を入れる
sudo apt-get install python3-setuptools
sudo easy_install3 pip
pip -V # pipの場所がpython3になっていることを確認
sudo pip install virtualenv
*開発を始める時 [#s699ba42]
-はじめて
virtualenv envname
pip3 install numpy
-二回目以降
. envname/bin/activate
pip list # envname環境でのパッケージ
-開発を終える時
deactivate
*参考 [#n66c183a]
-入門
--http://www.pythonweb.jp/tutorial/
--http://www.tohoho-web.com/python/index.html
*文法 [#f8f3bc94]
-☆
--セミコロンなし,インデントが文法.
--配列はmatlab式.[10, [20, 16], [32, u"太郎"], 18]など.スライス使える(a[1:2], a[:3], a[2:])が、スライス自体がリストにはならない.長さはlen(list),追記はlist.append(hoge).
--数値配列の作成はrange(1, 5)など([1, 2, 3, 4])
--文字列では、シングルとダブルクオートの区別がない
---取得は配列と同じ
---[[pythonの文字列処理の素晴らしいまとめ>http://d.hatena.ne.jp/yumimue/20071223/1198407682]]
--ifに括弧なし.if, elif, elseはすべて行末に:
--forはmatlab式+行末に:.forのinに文字列は一文字ずつ取得.for, whileのあとにelseを入れることができる
--コメントは#comment, """comment"""
--数字->文字はstr(num).文字→整数はint(str),文字→浮動はfloat(str),数値判定はstr.isdigit()
--論理演算子はor, and, not.真偽はTrue, False
--関数はdef function_name(arg1, ...):.行末に:が必要
---*でargs, **でパラメータを渡せる([[参照>http://www.tohoho-web.com/python/function.html#function]])
--intも含め配列の関数渡しも、「すべて」参照渡し
--a={}でc++でいうmapになる
---pythonのdictは存在しないキーを出力しようとするとデフォルトエラーなので、そうじゃなくしたいならgetを使う。
--printf
---print aでprintf("%d\n",a);
---print a,でprintf("%d",a);
-☆☆
--空オブジェクトはNone(Noneは予約語)
--空白文字削除はstr.strip()
--[[Pythonは日本語がクソ>http://lab.hde.co.jp/2008/08/pythonunicodeencodeerror.html]]
---以下を一行目に入れる
# coding: UTF-8
*バブルソート [#t4875c64]
def bubblesort(a):
for i in range(len(a)-2):
for j in range(len(a)-1-i):
if a[j] < a[j+1]:
tmp = a[j]
a[j] = a[j+1]
a[j+1] = tmp
a=[2,4,5,1,2]
bubblesort(a)
for i in range(len(a)):
print a[i]
*代表的なデータ型の操作 [#z907b3e1]
**型の大まかな特徴 [#me1efb06]
-pythonでは型が暗黙の了解となっている
-型
--int, float
--iterativeな型:list, set(, str)。これらの間は自由に行き来できる(strはちょっと怪しい)
---strは静的!
--tuple
---tupleは静的!(1, 3, 4)[2]などのアクセスが可能。
--dict
--ndarray
---listしか突っ込めない
--map object
---このままでは使えないので、list, setに渡してやる必要がある(strはダメ)
-変換
**型の相互変換 [#pfe4c017]
||int|float|str|list|set|dict|ndarray|h
|int|=|float(n)|str(n)|[n]|{n}|{n: m}|np.array([n])|
|float|int(x)|=|str(x)|[x]|{x}|{f: x}|np.array([x])|
|str|int(s), 失敗でRE, int('0.1')はRE。ord(s)でもOKで、ordは1文字以外だとRE|float(s), 失敗でRE|=|list(s)|set(s)|x|np.array(list(s))|
|list|a[i]|a[i]|str(a)は、listのデバッグ出力が文字列として得られる。a: [char]なら"".join(a)、a: [int]なら"".join(list(map(lambda x: chr(x+ord('0')), [0, 3])))|=|set(a)|ts = [(1, 2), (3, 4), (5, 6)]; dict(ts)。同じようにdict(zip(a, b))などが可能(zipはzip objectでlistを返すわけではないが、list(zip(a,b))で同様になる)|np.array(a)|
|set|for x in s: print(x)|for x in s: print(x)|str(s)、setのデバッグ出力が文字列として得られる|list(s)|=|x|np.array(list(s))|
|dict|d[x], xがなければRE|d[x], xがなければRE|str(d)、dictのデバッグ出力が文字列として得られる|list(d)はdのkeys list。dd.keys()は実はdict_keysという型!|set(d)はdのkeys set。d.keys()は実はdict_keysという型!|=|np.array(list(d))|
|ndarray|v[i]|v[i]|str(a)でデバッグ出力らしきもの(違う)が出る|list(a)かa.tolist()|set(a)|x|=|
**二次元配列 [#fc438b69]
-変な作り方をすると、参照になって代入が独立じゃなくなる。毎回リスト内包で作成すること!
**型ごとに可能な操作 [#v341765c]
||サイズ|要素追加|要素削除|反復|積|和|差分|検索|ソート|逆順|h
|list|len(a)|push_backがa.append(x), a.insert(i, x)はiの次にxを挿入する|push_backがa.pop()。a.pop(i)は#iを返して#iを消す。del a[i]で#iを消す。a.remove('a')でaを先頭1個削除(削除できないとRE)|[1] * 100|なし|+, これは.extend(b)と同等|なし|a.index('x'): xの始めを取得|a.sort()|a.reverse()|
|set|len(s)|s.add(x)|a.discard(x)がエラー無し。remove(x)はxがないとRE。s.pop()は何でもいいから一個削除して値を返す。|なし|and|or(「違うの」=論理排他和は^)|s-t||||
**str [#ic2a70d2]
-''静的データ構造!!''途中で#iの変更をしたくなっても無理。変更にO(n)かかり、基本的に遅い。Javaみたいな感じ。
-対策:動的文字列は、strではなくlistで管理する
-'a'+1みたいなことをしたい場合は?めんどいが
chr(ord(s)+1)
-したがって+演算子は毎回新たなオブジェクトを生成するので、あまり行儀が良くない
s = s + "新たな文字列1"
s = s + "新たな文字列2"
. . .
とせずに、配列を使って、
L = []
L.append("新たな文字列1")
L.append("新たな文字列2")
. . .
s = ''.join(L)
とするのが定石イディオム
-split
--これは便利
--複数文字delimiterもできる
>>> 'I have a pen'.split()
['I', 'have', 'a', 'pen']
>>> 'aabbababbabbbb'.split('a')
['', '', 'bb', 'b', 'bb', 'bbbb']
>>> 'aabbababbabbbb'.split('aa')
['', 'bbababbabbbb']
*ファイル [#y240e194]
for line in open("test.txt", "r")
line.strip()
print line
*正規表現 [#qa327b62]
import re
a = re.search(r'^[a-z]', line)
*numpy [#de8fc638]
Numpy
Transposeに同値な
Tというメンバ変数らしきものがあるhttps://docs.scipy.org/doc/numpy/reference/generated/numpy.ndarray.T.html
pythonできれいな2次元グラフを書く
http://qiita.com/kenmatsu4/items/d282054ddedbd68fecb0
パラメータ分布を{coda}パッケージを使ってプロットするとこんな感じです。
**ndarray [#wd032910]
-スライスアクセス
-ファンシーアクセス
-[[要素アクセス>http://stackoverflow.com/questions/33885201/access-ndarray-using-list]]
import numpy as np
ndarr = np.array([[1., 2., 3.], [4., 5., 6.], [7., 8., 9.]])
indices = [1,1] # row,col
ndarr[tuple(indices)]
*コーディングイディオム [#db53a3ec]
-swap
a, b = b, a
*メモ [#i00cafb4]
-[[バッチ系関数群>http://python.civic-apps.com/map-reduce-filter/]]
--Map, Reduce, Filter
-[[Cの共有ライブラリを使う>http://akiniwa.hatenablog.jp/entry/2013/09/28/142947]]
-[[型指定して高速化>http://kesin.hatenablog.com/entry/20120306/1331043675]]
--そして更に[[Numpy+Cythonで爆足>http://kesin.hatenablog.com/entry/20120314/1331689014]]
-[[多次元配列>http://bun6memo.blogspot.jp/2013/06/matlab_27.html]]
-[[ヒートマップの書き方>http://qiita.com/hik0107/items/67ad4cfbc9e84032fc6b]]