numpyの一般的な使い方

8828 ワード

numpy
import numpy as np
shop_price = [30, 20, 15, 40]
shop_num = [2, 3, 1, 4]

Anacondahttpsのインストール
ショートカットキー
         ,  esc       ,   b     
         ,  esc       ,   a     
         ,  esc       ,   dd      
      markdown  ,  esc       ,  m,   markdown
shift + enter:                
ctrl + enter:          

1 D配列
>>> np_shop_price = np.array(shop_price) 
>>> np_shop_price
array([30, 20, 15, 40])

>>> np_shop_num = np.array(shop_num)
>>> np_shop_num
array([2, 3, 1, 4])

配列間でベクトル演算が可能
>>> np_shop_price = np.array(shop_price) 
>>> np_shop_num = np.array(shop_num)
>>> np_shop_price * np_shop_num
array([ 60,  60,  15, 160])
>>> np.sum(np_shop_price * np_shop_num)
295

ベクトル演算はいちいち演算しなければならない
pythonでは、配列がリストであり、リスト間の演算をベクトル演算と呼び、2つのリストの要素の数が同じでなければなりません.そうしないと、エラーが発生します.
>>> a1 = np.array([1,2,3,4])
>>> a2 = np.array([1,2,3])
>>> a1*a2
---------------------------------------------------------------------------

ValueError                                Traceback (most recent call last)

 in 
----> 1 a1*a2
ValueError: operands could not be broadcast together with shapes (4,) (3,) 

numpyの基本プロパティ
>>> a1 = np.array([1,2,3,4])
>>> a1
array([1, 2, 3, 4])
>>> a2 = np.array([[1,2,3,4],[5,6,7,8]])
>>> a2
array([[1, 2, 3, 4],
       [5, 6, 7, 8]])
  • 配列要素のデータ型
  • >>> a1.dtype
    dtype('int32')
  • 配列要素の個数
  • >>> a1.size
    4
    >>> a2.size
    8
  • 配列の次元数、1次元配列か2次元配列か
  • >>> a1.ndim
    1
    >>> a2.ndim
    2
  • 配列の次元サイズは、
  • をメタグループとして表す.
    >>> a1.shape
    (4,)
    >>> a2.shape  (  ,  )
    (2, 4)
  • 配列の転置(二次元配列以上の配列のデータ構造の行と列を合わせる)
  • .
    >>> a2
    array([[1, 2, 3, 4],
           [5, 6, 7, 8]])
    >>> a2.shape  (  ,  )   
    (2, 4)
    >>> a2.T  (  ,   )
    array([[1, 5],
           [2, 6],
           [3, 7],
           [4, 8]])

    numpyを作成するいくつかの方法
    array
    リストを配列に変換
  • 整数型の配列を作成する
  • >>> a3 = np.array([1,2,3,4])
    >>> a3
    array([1, 2, 3, 4])
  • 浮動小数点タイプの配列を作成する
  • >>> a3 = np.array([1,2,3,4], dtype='float')
    >>> a3
    array([1., 2., 3., 4.])
  • 浮動小数点型の配列を整数型の配列
  • に変換する.
    >>> a3.astype('int')         int
    array([1, 2, 3, 4])

    arrange
    range関数と同様にnumpyでarrangeを使用します
  • 0,1,2からなる配列
  • を作成する
    >>> np.arange(3)
    array([0, 1, 2])
  • は3から7の間の数からなる配列を作成し、ステップ長は2
  • である.
    >>> np.arange(3,7,2)
    array([3, 5])

    linspace
    一定範囲内の数を配列設定の長さに基づいて平均除算して配列内の各要素を得、デフォルトで50部に分ける
  • は2から10の間の数からなる配列を作成し、配列長は50
  • である.
    >>> np.linspace(2,10)
    array([ 2.        ,  2.16326531,  2.32653061,  2.48979592,  2.65306122,
            2.81632653,  2.97959184,  3.14285714,  3.30612245,  3.46938776,
            3.63265306,  3.79591837,  3.95918367,  4.12244898,  4.28571429,
            4.44897959,  4.6122449 ,  4.7755102 ,  4.93877551,  5.10204082,
            5.26530612,  5.42857143,  5.59183673,  5.75510204,  5.91836735,
            6.08163265,  6.24489796,  6.40816327,  6.57142857,  6.73469388,
            6.89795918,  7.06122449,  7.2244898 ,  7.3877551 ,  7.55102041,
            7.71428571,  7.87755102,  8.04081633,  8.20408163,  8.36734694,
            8.53061224,  8.69387755,  8.85714286,  9.02040816,  9.18367347,
            9.34693878,  9.51020408,  9.67346939,  9.83673469, 10.        ])
    >>> np.linspace(2,10,num=5)
    array([ 2.,  4.,  6.,  8., 10.])
  • は2から10の間の数を作成し、配列の長さは5であり、10
  • を含むことはできない.
    >>> np.linspace(2,10,num=5,endpoint=False)
    array([2. , 3.6, 5.2, 6.8, 8.4])

    zeros
    配列の長さに応じて、すべて0の浮動小数点数の配列を作成します.
    >>> np.zeros(5)
    array([0., 0., 0., 0., 0.])

    ones
    配列の長さに応じてすべて1の浮動小数点数の配列を作成
    >>> np.ones(5)
    array([1., 1., 1., 1., 1.])

    reshape
    1 D配列を多次元配列に変換
    >>> a4 = np.arange(10)
    >>> a4
    array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
    >>> a4.reshape(2,5)
    array([[0, 1, 2, 3, 4],
           [5, 6, 7, 8, 9]])
    >>> a4.reshape(5,2)
    array([[0, 1],
           [2, 3],
           [4, 5],
           [6, 7],
           [8, 9]])
    >>> a4.reshape(3,3)    
        ---------------------------------------------------------------------------
    
    ValueError                                Traceback (most recent call last)
    
     in 
    ----> 1 a4.reshape(3,3)
    ValueError: cannot reshape array of size 10 into shape (3,3)

    索引とスライス
    配列と定数の演算
    >>> a4
    array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
    >>> a5 = a4*3
    >>> a5
    array([ 0,  3,  6,  9, 12, 15, 18, 21, 24, 27])
    >>> li = [1, 2, 3, 4]
    >>> li*3
    [1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4]
    >>> a5+3
    array([ 3,  6,  9, 12, 15, 18, 21, 24, 27, 30])
    >>> a5
    array([ 0,  3,  6,  9, 12, 15, 18, 21, 24, 27])

    同等サイズ配列間の演算
    >>> a7 = np.array([1,2,3,4])
    >>> a8 = a5 = np.array([1,2,3,4])
    >>> a7*a8
    array([ 5, 12, 21, 32])

    配列のインデックス
    
    >>> a5[2]
    6
    >>> a6 = a5.reshape(2,5)
    >>> a6
    array([[ 0,  3,  6,  9, 12],
           [15, 18, 21, 24, 27]])
    >>> a6[0,2]
    6
    >>> a6[0][2]
    6

    配列のスライス
    >>> a5
    array([ 0,  3,  6,  9, 12, 15, 18, 21, 24, 27])
    >>> a5[3:6]
    array([ 9, 12, 15])
    >>> a6
    array([[ 0,  3,  6,  9, 12],
           [15, 18, 21, 24, 27]])
    >>> a6[:,2:4]
    array([[ 6,  9],
           [21, 24]])

    ブール索引
    >>> a5
    array([ 0,  3,  6,  9, 12, 15, 18, 21, 24, 27])

    取得配列の5より大きい数
    >>> a5>5
    array([False, False,  True,  True,  True,  True,  True,  True,  True,
            True])

    5より大きいすべての偶数を取り出します
    >>> a5[(a5>5) & (a5%2==0)]
    >>> array([ 6, 12, 18, 24])

    花インデックス
    >>> a5
    array([ 0,  3,  6,  9, 12, 15, 18, 21, 24, 27])

    取得インデックスが2,4,8に対応する具体的な値
    >>> a5[[2,4,8]]
    array([ 6, 12, 24])

    汎用関数
    絶対値をとる
    >>> np.abs(-2)
    2

    ルートをつける
    >>> np.sqrt(4) 
    2.0

    値を上げる
    >>> np.ceil(3.2)
    4.0
    np.ceil(3.8)
    4.0

    四捨五入
    >>> np.rint(3.2)
    3.0
    >>> np.rint(3.7)
    4.0

    小数点以下は0
    >>> np.trunc(1.5)
    1.0

    整数と小数を分ける
    >>> np.modf(12.22)
    (0.22000000000000064, 12.0)
    >>> np.modf([0,3.5])
    (array([0. , 0.5]), array([0., 3.]))

    データが数字ではないかどうかを判断する
    >>> np.isnan(3) 
    False

    2つの配列の中の最大値を取って新しい配列を構成します
    >>> np.maximum([2,3,4],[1,5,2])
    array([2, 5, 4])

    平均値をとる
    >>> a5
    array([ 0,  3,  6,  9, 12, 15, 18, 21, 24, 27])
    >>> np.mean(a5)
    13.5

    ほうさを取る((0-13.5)^2+(3-13.5^2)+...+(27-13.5)^2)/10 ===>
    >>> a5
    array([ 0,  3,  6,  9, 12, 15, 18, 21, 24, 27])
    >>> np.var(a5)
    74.25

    ツールバーの
    >>> np.sort(a5)
    array([ 0,  3,  6,  9, 12, 15, 18, 21, 24, 27])

    乱数生成
  • は、0から1の間の乱数
  • を生成する.
    >>> np.random.rand()
    0.41127690452609
  • は、3行2列の0から1の乱数の配列
  • を生成する.
    >>> np.random.rand(3,2)  
    array([[0.25495748, 0.4505048 ],
           [0.70361618, 0.37524951],
           [0.19785526, 0.3860836 ]])
  • は、0から2以内の10個の整数の配列
  • を生成する.
    >>> np.random.randint(2,size=10)
    array([1, 1, 0, 1, 1, 0, 0, 0, 0, 1])
  • は、2から5以内の10個の整数の配列
  • を生成する.
    >>> np.random.randint(2,5,size=10)
    array([2, 4, 4, 2, 4, 4, 3, 4, 2, 3])
  • は、5以内の3つの整数からなる配列
  • を生成する.
    >>> np.random.choice(5,3)
    array([4, 2, 4])
  • 所与の形状はランダム配列
  • を生成する.
    >>> np.random.uniform(-1,0,10)
    array([-1.86027339e-01, -5.65761107e-01, -7.38784743e-01, -9.64964081e-01,
           -3.88713618e-01, -5.17054693e-01, -5.46899721e-01, -9.90719601e-01,
           -7.09073463e-04, -5.16624999e-01])