numpy の基本その8

  • サイズの異なる配列同士を足すと、大きいほうの配列にサイズを変換の上、演算を行う
    • これをブロードキャストという
#!/usr/bin/env python
#coding:utf-8

import numpy as np


def work():
    a = np.array([[ 0, 1, 2],[ 0, 1, 2],[ 0, 1, 2],[ 0, 1, 2]])
    b = np.array([[ 0, 0, 0],[10,10,10],[20,20,20],[30,30,30]])

    print a + b
    # [[ 0  1  2]
    #  [10 11 12]
    #  [20 21 22]
    #  [30 31 32]]

    
    a = np.array([ 0, 1, 2])
    b = np.array([[ 0, 0, 0],[10,10,10],[20,20,20],[30,30,30]])

    print a + b
    # [[ 0  1  2]
    #  [10 11 12]
    #  [20 21 22]
    #  [30 31 32]]
    
    
    a = np.array([ 0, 1, 2])    
    b = np.array([[0],[10],[20],[30]])

    print a + b
    # [[ 0  1  2]
    #  [10 11 12]
    #  [20 21 22]
    #  [30 31 32]]


    # 5 * 5 の格子点の原点からの距離を計算
    x = np.arange(5)
    y = np.arange(5).reshape(5,1)
    
    print np.sqrt(x**2 + y**2)
    # [[ 0.          1.          2.          3.          4.        ]
    #  [ 1.          1.41421356  2.23606798  3.16227766  4.12310563]
    #  [ 2.          2.23606798  2.82842712  3.60555128  4.47213595]
    #  [ 3.          3.16227766  3.60555128  4.24264069  5.        ]
    #  [ 4.          4.12310563  4.47213595  5.          5.65685425]]


    # 中心(25, 12)、半径 10  の円の範囲を0で塗りつぶす
    mat = np.ones((30, 30), dtype=np.int)

    x = np.arange(30)
    y = np.arange(30).reshape(30,1)
    mask = np.sqrt((x-25)**2 + (y-12)**2) < 10
    
    mat[mask] = 0
    
    print mat
    # [[1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1]
    #  [1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1]
    #  [1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1]
    #  [1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0]
    #  [1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0]
    #  [1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0]
    #  [1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0]
    #  [1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0]
    #  [1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
    #  [1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
    #  [1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
    #  [1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
    #  [1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
    #  [1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
    #  [1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
    #  [1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
    #  [1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
    #  [1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0]
    #  [1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0]
    #  [1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0]
    #  [1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0]
    #  [1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0]
    #  [1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1]
    #  [1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1]
    #  [1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1]
    #  [1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1]
    #  [1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1]
    #  [1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1]
    #  [1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1]
    #  [1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1]]


if __name__ == "__main__":
    work()