pythonデータ分析実戦---Numpy科学計算ツール

7497 ワード

Numpyの基本認識
NumPy(Numerical Python)はPython言語の拡張ライブラリであり、大量の次元配列とマトリクス演算をサポートし、また配列演算に対して大量の数学関数ライブラリを提供する.
NumPyは非常に高速な数学ライブラリであり、主に配列計算に使用され、以下を含む.
  • 強力なN次元配列オブジェクトndarray
  • 放送機能関数
  • C/C++/Fortranコードを統合するツール
  • 線形代数、フーリエ変換、乱数生成等の機能
  •  
    Numpyベースデータ構造
    NumPy配列の次元数をランク(rank)と呼び,1次元配列のランクを1,2次元配列のランクを2とする.
    NumPyでは、各線形配列は軸(axis)、すなわち次元(dimensions)と呼ばれます.たとえば、2次元配列は2つの1次元配列に相当し、最初の1次元配列の各要素は1次元配列であるため、1次元配列はNumPyの軸です.(axis)、最初の軸は最下位の配列に相当し、2番目の軸は最下位の配列の配列である.軸の数であるランクは、配列の次元数である.
    axisを宣言できることが多い.axis=0は、0番目の軸に沿って操作する、すなわち、各列を操作することを示す.axis=1は、第1軸に沿って動作する、すなわち、各行に対して動作することを示す.
    NumPyの配列で重要なndarrayオブジェクトの属性は次のとおりです.
    ツールバーの
    説明
    ndarray.ndim
    ランク、すなわち軸の数または次元の数
    ndarray.shape
    配列の次元、マトリクス、n行m列
    ndarray.size
    配列要素の総個数は、.shapeのn*mの値
    ndarray.dtype
    ndarrayオブジェクトの要素タイプ
    ndarray.itemsize
    ndarrayオブジェクトの各要素のサイズ(バイト単位)
    ndarray.flags
    ndarrayオブジェクトのメモリ情報
    ndarray.real
    ndarray要素の実部
    ndarray.imag
    ndarray要素の虚部
    ndarray.data
    実際の配列要素を含むバッファは、一般的に配列のインデックスによって要素が取得されるため、この属性を使用する必要はありません.
     
    import numpy
    
    
    ar = numpy.array([[1,2,3,4,5],[2,3,4,5,6],[3,4,5,6,7]])
    print(ar)
    
    print(ar.ndim)
    print(ar.shape)
    print(ar.size)
    print(ar.itemsize)
    print(ar.data)
    print(ar.dtype)
    print(ar.flags)
    print(ar.real)
    print(ar.imag)
    
      :
    [[1 2 3 4 5]
     [2 3 4 5 6]
     [3 4 5 6 7]]
    2
    (3, 5)
    15
    4
    
    int32
      C_CONTIGUOUS : True
      F_CONTIGUOUS : False
      OWNDATA : True
      WRITEABLE : True
      ALIGNED : True
      WRITEBACKIFCOPY : False
      UPDATEIFCOPY : False
    
    [[1 2 3 4 5]
     [2 3 4 5 6]
     [3 4 5 6 7]]
    [[0 0 0 0 0]
     [0 0 0 0 0]
     [0 0 0 0 0]]  

    配列の作成
    Array()関数括弧内はlist,メタグループ,配列,ジェネレータなどであってもよい
    ar = np.array([[1,2,3,4,5],[2,3,4,5,6],[3,4,5,6,7]])
    ar1 = np.array(range(10))
    ar2 = np.array(10)
    ar3 = np.array([[1,2,3,4,5],[2,3,4,5,6],['a','b','c','d']])
    print(ar)
    print(ar1)
    print(ar2)
    print(ar3)
    
        :
    [[1 2 3 4 5]
     [2 3 4 5 6]
     [3 4 5 6 7]]
    [0 1 2 3 4 5 6 7 8 9]
    10
    [list([1, 2, 3, 4, 5]) list([2, 3, 4, 5, 6]) list(['a', 'b', 'c', 'd'])] 

    arange()関数はrange()と同様に、所与の間隔内で均一な間隔の値を返します.
    print(np.arange(10))
    print(np.arange(10.0))
    print(np.arange(5,12))
    print(np.arange(5.0,12.3))
    
    
        :
    [0 1 2 3 4 5 6 7 8 9]
    [0. 1. 2. 3. 4. 5. 6. 7. 8. 9.]
    [ 5  6  7  8  9 10 11]
    [ 5.  6.  7.  8.  9. 10. 11. 12.]
    print(numpy.linspace(5,14,num=10)) #     【  ,  】    num        
    print(numpy.linspace(5,14,num=11))
    
    print(numpy.zeros((4,4),dtype=numpy.int))  #         ,      0    
    
    ar = numpy.array([range(10),range(10,20)])
    print(numpy.zeros_like(ar))
    print(ar)
    
    print(numpy.ones((2,3),dtype=numpy.int))    #         ,      1    
    
    #ones_like() zeros_like()  
    
    print(numpy.eye(3,dtype=numpy.int)) #       N+N     ,     1,     0
    
    
        :
    [ 5.  6.  7.  8.  9. 10. 11. 12. 13. 14.]
    [ 5.   5.9  6.8  7.7  8.6  9.5 10.4 11.3 12.2 13.1 14. ]
    [[0 0 0 0]
     [0 0 0 0]
     [0 0 0 0]
     [0 0 0 0]]
    [[0 0 0 0 0 0 0 0 0 0]
     [0 0 0 0 0 0 0 0 0 0]]
    [[ 0  1  2  3  4  5  6  7  8  9]
     [10 11 12 13 14 15 16 17 18 19]]
    [[1 1 1]
     [1 1 1]]
    [[1 0 0]
     [0 1 0]
     [0 0 1]]

    Numpy汎用関数
    反転配列numpy.T
    配列形状numpyを変更する.reshape
    指定形態の新しい配列numpyを返す.resize
    import numpy as np
    
    ar = np.arange(10)
    ar1 = np.zeros((2,4))
    print(ar)
    print(ar1)
    print(ar.T)
    print(ar1.T)
    
    ar2 = np.arange(12)
    ar3 = np.arange(12).reshape(3,4)
    print(ar2)
    print(ar3)
    
    print(np.resize(ar3,(4,4)))
    
        :
    [0 1 2 3 4 5 6 7 8 9]
    [[0. 0. 0. 0.]
     [0. 0. 0. 0.]]
    [0 1 2 3 4 5 6 7 8 9]
    [[0. 0.]
     [0. 0.]
     [0. 0.]
     [0. 0.]]
    [ 0  1  2  3  4  5  6  7  8  9 10 11]
    [[ 0  1  2  3]
     [ 4  5  6  7]
     [ 8  9 10 11]]
    [[ 0  1  2  3]
     [ 4  5  6  7]
     [ 8  9 10 11]
     [ 0  1  2  3]]

    配列のコピーcopy()
    ar = np.arange(10)
    print(ar)
    ar1 = ar
    ar1[2]=100
    print(ar,ar1)
    
    ar3 = ar.copy()
    ar3[3]=998
    print(ar,ar3)
    
        :
    [0 1 2 3 4 5 6 7 8 9]
    [  0   1 100   3   4   5   6   7   8   9] [  0   1 100   3   4   5   6   7   8   9]
    [  0   1 100   3   4   5   6   7   8   9] [  0   1 100 998   4   5   6   7   8   9]

    配列の文字変換
    ar2 = numpy.array(range(16)).reshape(4,4)
    ar3 = ar2.astype(numpy.str)
    print(ar3)
    
        :
    [['0' '1' '2' '3']
     ['4' '5' '6' '7']
     ['8' '9' '10' '11']
     ['12' '13' '14' '15']]

    接続配列
    ar = np.array([[1,2,3],[4,5,6]])
    ar1 = np.array([[7,8,9],[10,11,12]])
    
    ar2 = np.stack((ar,ar1),0) #         
    ar3 = np.hstack((ar,ar1))#     
    ar4 = np.vstack((ar,ar1))#    
    print(ar2,ar3,ar4)
    
        :
    [[[ 1  2  3]
      [ 4  5  6]]
    
     [[ 7  8  9]
      [10 11 12]]]
     [[ 1  2  3  7  8  9]
     [ 4  5  6 10 11 12]]
     [[ 1  2  3]
     [ 4  5  6]
     [ 7  8  9]
     [10 11 12]]
    

    分割配列
    ar = np.arange(16).reshape(4,4)
    ar1 = np.vsplit(ar,2)  #    
    ar2 = np.hsplit(ar,2)  #    
    print(ar)
    print(ar1)
    print(ar2)
    
        :
    [[ 0  1  2  3]
     [ 4  5  6  7]
     [ 8  9 10 11]
     [12 13 14 15]]
    [array([[0, 1, 2, 3],
           [4, 5, 6, 7]]), array([[ 8,  9, 10, 11],
           [12, 13, 14, 15]])]
    [array([[ 0,  1],
           [ 4,  5],
           [ 8,  9],
           [12, 13]]), array([[ 2,  3],
           [ 6,  7],
           [10, 11],
           [14, 15]])]

    配列の計算
    ar2 = numpy.array(range(16)).reshape(4,4)
    ar3 = ar2.astype(numpy.str)
    print(ar3)
    ar4 = ar2*10+100
    print(ar4)
    print(ar4.mean()) #    
    print(ar4.sum()) #   
    
        :
    [['0' '1' '2' '3']
     ['4' '5' '6' '7']
     ['8' '9' '10' '11']
     ['12' '13' '14' '15']]
    [[100 110 120 130]
     [140 150 160 170]
     [180 190 200 210]
     [220 230 240 250]]
    175.0
    2800
    

     
    Numpyインデックスとスライス
    基本インデックスおよびスライス
    import  numpy as np
    
    #          list
    ar  = np.arange(20)
    # print(ar[2])
    # print(ar[3:5])
    # print(ar[::2])
    
    
    #                   
    ar1 = ar.reshape(4,5)
    # print(ar1)
    print(ar1[2][2])
    print(ar1[2:4][0][2])
    print(ar1[:2])
    
        :
    12
    12
    [[0 1 2 3 4]
     [5 6 7 8 9]]
    

    ブール型のインデックスとスライス
    ar = np.arange(12).reshape(3,4)
    print(ar)
    
    i = np.array([True,False,True])
    j = np.array([True,False,True,False])
    print(i)
    print(j)
    print(ar[i,:])  #     ,   True  
    print(ar[:,j]) #        ,   True  
    
    print(ar[ar>5])  #        
    
        :
    [[ 0  1  2  3]
     [ 4  5  6  7]
     [ 8  9 10 11]]
    [ True False  True]
    [ True False  True False]
    [[ 0  1  2  3]
     [ 8  9 10 11]]
    [[ 0  2]
     [ 4  6]
     [ 8 10]]
    [ 6  7  8  9 10 11]

    Numpy乱数
    print(np.random.normal(size=(4,4)))  #     
    
    print(np.random.rand(4))   #    【0-1】           N     ---    
    print(np.random.rand(2,4))
    print(np.random.randn(4))  #    【0-1】           N    ---    
    print(np.random.randn(2,4))
    print(np.random.randint(5))  #        N     
    print(np.random.randint(10,50,size=(4,4)))

    Nmupyデータ入出力
    ar = numpy.random.randint(0,100,size=(10,10))
    numpy.savetxt("savetxt.txt",ar,delimiter=",",fmt="%i")   #     
    
    txt_load = numpy.loadtxt("savetxt.txt",delimiter=',')    #     
    print(txt_load)
    # print(ar)
    

     
    関連リンク:
  • NumPy公式サイトhttp://www.numpy.org/
  • NumPyソースコードhttps://github.com/numpy/numpy
  • Numpyチュートリアルhttps://www.runoob.com/numpy/numpy-tutorial.html

  •  
    転載先:https://www.cnblogs.com/garrett0220/p/11495597.html