内容へ移動
yuuho.wiki
カオスの欠片を集めて知恵の泉を作る
ユーザ用ツール
ログイン
サイト用ツール
検索
ツール
文書の表示
以前のリビジョン
バックリンク
最近の変更
メディアマネージャー
サイトマップ
ログイン
>
最近の変更
メディアマネージャー
サイトマップ
現在位置:
start
»
tips
»
python
»
numpy
トレース:
•
env
tips:python:numpy:start
この文書は読取専用です。文書のソースを閲覧することは可能ですが、変更はできません。もし変更したい場合は管理者に連絡してください。
====== numpy ====== ==== 裏技 ==== === 座標を得る === 画像は高さ方向下向きに''H''で幅方向右向きに''W''と決まっている. 画像は''(H,W,C)''の形である. コンピューターで使われる二次元座標はほとんどの場合右方向に''X'',下方向に''Y''となっている. つまり画像中の座標は''(Y,X)''となっているのだ. 画像中の座標が求まると座標を利用した画像処理ができて便利. ''(H,W,2_xy)''の形の座標を作ってみよう. <code python> H,W = Y,X = 5,7 grid = np.mgrid[:H,:W].transpose(1,2,0)[:,:,::-1] grid = np.mgrid[:Y,:X].transpose(1,2,0)[:,:,::-1] grid = np.stack(np.mgrid[:H,:W][::-1],-1) grid = np.mgrid[:H,:W][::-1].transpose(1,2,0) grid = np.mgrid[:W,:H].T </code> これをつかって画像中心からの距離を利用してグラデーションのかかった点を描画してみる <code python> import numpy as np from PIL import Image H,W = 300,400 grid = np.c_[tuple(m[:,:,np.newaxis] for m in np.mgrid[:H,:W][::-1])] window = 3 x,y = grid[:,:,0], grid[:,:,1] x = x/W*window - (window/2) y = y/H*window - (window/2) v = np.e**(-(x**2+y**2))[:,:,np.newaxis] * 255 img = np.c_[v,v,v].astype(np.uint8) Image.fromarray(img) </code> この場合,2x2行列での座標変換は <code python> transformed = (np.array([[1,2],[3,4]]) @ grid.reshape(-1,2).T).T.reshape(grid.shape) </code> とやるのが良さそう. === 同次座標 === (N,2)のndarrayを同次座標に変えて戻す <code python> harr = np.c_[arr,np.ones((arr.shape[0],1))] arr = harr[:,:-1] </code> === サンプリングを利用した画像変形 === <code python> H,W,C = Y,X,_ = img.shape grid = np.mgrid[:H,:W].transpose(1,2,0)[:,:,::-1] smp_x = grid[:,:,0].astype(np.int64).flatten() smp_y = grid[:,:,1].astype(np.int64).flatten() out = img[smp_y,smp_x,:].reshape(H,W,C) </code> === int から one hot へ === ==== 変形 ==== ''np.r_''はaxis=0でのconcatenate.\\ ''np.c_''はaxis=-1でのconcatenate.(要検証) dtypeは常に意識するのが良い. ==== in-place ==== numpyやpytorchのin-placeな関数とは 破壊的代入をおこなう関数.copy()などで防げる. ==== 代入 ==== 以下は同じ,式が使えない内包表記ではメソッドが便利 <code python> canvas[A==B] = hoge canvas.place(A==B,hoge) </code> 1チャンネル画像を3チャンネルにしたいときの書き方 <code python> # 持っている : alpha (H,W) # 欲しい : img (H,W,C) #通常 hoge = alpha[:,:,None] img = np.c_[hoge,hoge,hoge] #broadcast img = np.zeros((1,1,3),dtype=alpha.dtype)+alpha[...,None] #or img = np.array([[[0,0,0]]],dtype=alpha.dtype)+alpha[...,None] #内包 img = [np.c_[a,a,a] for a in [alpha[:,:,None]] ][-1] #method img = alpha[:,:,None].repeat(3,axis=2) </code> ==== linalg ==== linear algebra (線形代数) パッケージ. === linalg.solve(A,B) === $AX=B$の$X$を返す. === 型変換 === ''.astype()''でfloatからintへ変換すると,四捨五入ではなく小数点以下切り捨てとなる. ==== print関数の挙動を変更 ==== ''numpy.set_printoptions()'' を使えば良い * [[https://python.atelierkobato.com/print_option/|NumPy 表示形式の設定]]
tips/python/numpy/start.txt
· 最終更新: 2021/11/28 17:13 by
yuuho
ページ用ツール
文書の表示
以前のリビジョン
バックリンク
文書の先頭へ