【Pythonメモ】zip

zip

複数のシーケンスを並列的に反復処理が出来る。

list1 = [1, 2, 3] list2 = [4, 5, 6] for (a, b) in zip(list1, list2): #list1,list2を同時にループ … print(a,b)

>> list1 = [1, 2, 3]
>> list2 = [4, 5, 6]

for (a, b) in zip(list1, list2): 
    print(a,b)

1 4
2 5
3 6
#シーケンスの要素数が異なる場合、要素数が少ない場合に合わせて挙動

>> list1 = [1, 2, 3,4]
>> list2 = [4, 5, 6]

for (a, b) in zip(list1, list2): 
    print(a,b)

1 4
2 5
3 6

【Pythonメモ】enumerate OrderDicts nditer

enumerate

リストをインデックス化することができます。

>> list=["a","b","c","d","e"]
>>> for index,val in enumerate(list):
        print(index,val)

(0, 'a')
(1, 'b')
(2, 'c')
(3, 'd')
(4, 'e')

OrderDicts

ディクショナリとほぼ同じだが、順序が保存出来る。

>>> tests = OrderedDict()
>>> tests['test1'] = '1'
>>> tests['test2'] = '2'
>>> tests['test3'] = '3'
>>> print tests
OrderedDict([('test1', '1'), ('test2', '2'), ('test3', '3')])

>>> for k, v in fruits.items():
        print(k,v)
 
('test1', '1')
('test2', '1')
('test3', '2')

numpy nditer

nditerを用いると、繰り返し処理が楽なる

例えば、2×3行列なら以下のように×

import numpy as np

np_array = np.random.randn(2,3)

print(np_array)

nditer = np.nditer(np_array, flags=['multi_index'])

while not nditer.finished:
    print(np_array[nditer.multi_index])
    nditer.iternext()
    
[[-1.10258502 -1.390158   -1.3459963 ]
 [ 0.92886904 -0.2251729   0.23059408]]

-1.10258502292
-1.39015799755
-1.3459963044
0.928869035018
-0.225172899317
0.230594077137

pythonのみで同じ処理を書くのは以下の通り

ネストしなくていい分、nditerを使ったほうが楽です。

for  test in np_array:
    for t in test:
        print(t)

【pythonメモ】numpyメソッド randn max sum

random randn

標準正規分布を出力(標準0、分散1)

import numpy as np

>>> np.random.randn() 
#-0.728737781876976
>>> np.random.randn(2,3) #2×3
array([[-0.01827125, -0.38984807,  0.08674773],
       [ 0.68593183,  0.82708901, -0.15050036]])

max

配列の中の最大値を出力

>>> np.random.randn(2).max()
2

sum(axis)

>>> np.array([1,2]).sum()
3

【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()