【Pythonメモ】numpyメソッド argmax
argmax
配列の中の最大値のインデックスを返すメソッドです。
>>> import numpy as np >>> test = np.array([1,2,5,40,20,30]) #配列は6個 >>> np.argmax(test) 3 #インデックスは0から数える >>> test2 = np.array([[1,2,3][10,20,30]]) #二次配列 >>> np.argmax(test2) #全要素の中から最大値を返す 5 ※軸を指定する時は第二引数にaxis=2といった形で指定 >>> test3 = [[1,2,5],[40,20,30],[10,20,30]] >>> np.argmax(test3,axis=1) #軸を1にしあt array([2, 0, 2]) >>> test4 =[[[1,2,5],[40,20,30],[10,20,30]],[[1,2,5],[40,20,30],[10,20,30]]] >>> np.argmax(test4,axis=2) #軸を2にした array([[2, 0, 2], [2, 0, 2]])
【Pythonメモ】numpyメソッド
メソッド調査
arange reshape linspace zeros_like ones_like zeros ones linspace
arange
np.arange([start,]stop, [step,])
一次元の配列を返す。 startが入っていない場合は0から始まる
import numpy as np np.arange(6) #初期値 start 0 step 1 #array([0, 1, 2, 3, 4, 5]) np.arange(1,3,0.1) # array([ 1. , 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9, 2. , 2.1, # 2.2, 2.3, 2.4, 2.5, 2.6, 2.7, 2.8, 2.9])
zeros_like
配列の値をゼロにする。
np.zeros_like([[1,2,3],[2,3,4]]) #array([[0, 0, 0], # [0, 0, 0]])
ones_like
配列の値をイチにする。
np.ones_like([[1,2,3],[2,3,4]]) #array([[1, 1, 1], # [1, 1, 1]])
zeros
配列(行×縦)を作成、値はゼロ
np.zeros([3,2]) #array([[ 0., 0.], # [ 0., 0.], # [ 0., 0.]]) np.zeros((3,2)) #タプルも大丈夫
ones
配列(行×縦)を作成、値はイチ
np.ones([3,2]) #array([[ 1, 1], # [ 1, 1], # [ 1, 1]])
linspace
numpy.linspace(start, stop, num) 初期値(start)から終わり(stop)までを等間隔で配列を作成
np.linspace(0,1,5) #array([ 0. , 0.25, 0.5 , 0.75, 1. ])
flatten
多次元配列を一次元配列に変換
np.array([[1,2],[3,4],[5,6]]).flatten() #array([1, 2, 3, 4, 5, 6])
【Python】OpenCV2.4系 輪郭メソッド メモ
findContours(img,retrieval_mode,approx_mode)
画像の輪郭抽出に用いられます。
img:入力画像 retrieval_mode:抽出方法 approx_mode:近似モード
抽出方法について
わかりづらいのですが 輪郭が複数あった際の処理方法を示しています。 よく取り上げられるのはCV_RETR_LIST でしょうか。 この方法を設定すると、opencvが認識した輪郭全てを配列として返します。 ここを参照
近似モードについて
知覚した輪郭(点の集合)をどのように保存するか示しています。
代表的な近似モードは以下でしょうか。
CHAIN_APPROX_NONE (輪郭として抽出されたほぼ?)全ての点を保存します。 その他はわかりませーん\(^o^)/
drawContours(img, contours, -1,color,thickness)
検出した輪郭を描画します。
img:入力画像
contours:findContoursで抽出された輪郭(list形式)
第三引数:.全輪郭を描画する時はー1
【Python】OpenCV 初歩的メソッドメモ
はじめに
opencvを最近になって勉強しています。
備忘録として初歩的なメソッドをメモしておきます。
環境:Python 2.7.12 opencv 2.4.12
画像の読み込み
imread(読み込み画像パス)
色空間の変換
cvtColor(img,cv2.COLOR_BGR2GRAY)
COLOR_BGR2GRAY ・・・グレースケールにする
ウィンドウに画像を表示
imshow ・・・ウィンドウに画像を表示
# -*- coding: utf-8 -*- import cv2 img = imread("./test.jpg") gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) #u'グレーに変換' cv2.imshow('image', img) #u'第一引数はウィンドウの名前、第二引数は画像データ' cv2.waitKey(0) #u'キーが押されるまで待機' if key == 27: cv2.destroyAllWindows()
【ネットワーク】リバースプロキシ、ロードバランサ
リバースプロキシとは
リバースプロキシとは、クライアント(ブラウザ)と webサーバー(nginx)の間にたって、代理で処理出来るものです。
リバースプロキシのメリットとしては、 クライアントとwebサーバーの間に挟まることで、様々な前後処理を施すことが出来ます。
IPアドレスのフィルタリングが出来ます。不明な大量アクセスを防ぐ際に重宝しそうですね。
例えば、不明な国からのアクセス(クライアント)に対してIPアドレスから判別して、アクセス拒否の処理が出来そうです。
※フィルタリングはwebサーバーでも対応出来そうですが、サーバーに 何個も役割をもたせるのは後々のことを考えると望ましくないと思います。
ロードバランサとは
複数のwebサーバーに処理を振り分けることが出来ます。
例えば、webサーバー複数ある場合、負荷を平準化するために用いられます。
サーバー構築で詰まった話
はじめに
VPSでrailsで作成したサービスを公開する時、 サーバー(≒VPS)設定につまずきました。
初心者(=私)がサーバー設定につまずいた理由
僕が思うにサーバー設定が障害となる最大の理由は 今までやっていた開発(js、ruby、php・・・)と別の知識 が要求されることです。
1.ネットワーク系の単語の意味がわからない。(リバースプロキシ?、ポート?、vim?)
2.サーバー構築するために何をすべきかわからない。(DB設定、ファイアウォール・・・)
3.linuxコマンドの習熟度
上記3つはVPSを扱う上で初歩的な話だと思います。 ただ、私は全く知らずにVPSをの黒画面と格闘していました。
その他理由
加えて、サーバー構築を行なう場合、目に見える世界ではないので エラーが出た時、どう対処して良いのかわかりません。
logファイルを読めば対処出来るのですが、 logを読むという基本を意識していなかったので苦労した経験があります。
サーバー勉強しなくては
とまあ、つらつら書いてきましたが、
サーバーはhtml、js、rubyとは違った方面の知識が必要とされます。
なので、慣れるまでは概念やらコマンドやら勉強する必要があります。
このブログで少しずつまとめていけたらと考えています。
nginx 特徴
最近、nginxでサーバー構築を行っているので、メモがてらブログでまとめます。
webサーバーとは
ブラウザ(chromeやsafari)のリクエスト(例えば、http://www.hatena.ne.jp/にアクセス) に対して自身の返すデータを返す役割を持っています。
ブログを例に取ると、「はてなブログにある私の2月1日の記事」のリンクをクリックした場合、 2月1日の記事をアプリケーションに問い合わせをして記事(HTMLなど)を返す役割です。
つまり、ブラウザとアプリケーション(railsではアプリケーションサーバー) の橋渡しの役割をしています
nginxの特徴
1性能が高い
他のサーバー(僕はnginxしか知らないですが・・・) 同時接続数が増えても落ちづらいと言われています。
ググったら色々とあります。 Qiita記事
2ロードバランサ、リバースプロキシ
nginxはロードバランサ、リバースプロキシの設定が容易なのが特徴です。
3設定ファイルの構造がシンプル
ログファイルを確認するときは /logなど直下的にわかりやすいディレクトリ構造だと感じました。 (他のサーバーは知らないので
次回はリバースプロキシ、ロードバランサをまとめます。