[[プログラミング]] *概要 [#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]] |