numpyの基礎知識

2413 ワード

標準的にインストールされているPythonではリスト(list)で値のセットを保存し、配列として使用できますが、リストの要素は任意のオブジェクトであるため、リストに保存されているのはオブジェクトのポインタです.このように単純な[1,2,3]を保存するには,3つのポインタと3つの整数オブジェクトが必要である.数値演算にとって,この構造はメモリとCPUの計算時間を明らかに浪費している.さらにPythonは、arrayオブジェクトとリストが異なり、直接数値を保存し、C言語の1次元配列と比較して類似しているarrayモジュールも提供しています.しかし多次元はサポートされておらず,各種演算関数もないため,数値演算にも適していない.NumPyの誕生はこれらの不足を補い、NumPyはndarray(N-dimensional array object)とufunc(universal function object)の2つの基本的なオブジェクトを提供した.ndarrayは単一のデータ型を格納する多次元配列であり,ufuncは配列を処理できる関数である.
配列の作成
  • は、array関数にPythonを渡すシーケンスオブジェクトによって配列を作成することができる.
  • NumPyは、arange関数、linspace関数、logspace関数、random関数、zeros、onesなどの配列を作成するための多くの関数を提供します.
    属性の取得
  • ndarray.shape配列の次元.これは、配列の各次元のサイズを示す整数メタグループです.
  • ndarray.size配列要素の合計個数は、shape属性のメタグループ要素の積に等しい.
  • ndarray.dtypeは配列中の要素タイプのオブジェクトを記述するために用いる.
  • ndarray.reshape配列のreshapeメソッドを使用すると、寸法を変更した新しい配列を作成できます.元の配列のshapeは
    import numpy as np
    a=np.array([1,2,3,4])
    b=np.array((1,2,3,4))
    #  / 
    print np.arange(1,10,1)#[1 2 3 4 5 6 7 8 9]
    print np.linspace(1,10,5)#[  1.     3.25   5.5    7.75  10.  ]
    print np.logspace(1,2,5)#[10. 17.7827941 31.6227766  56.23413252 100. ]
    #   
    print np.random.rand(1,5)#         [[ 0.54190009  0.88740335  0.26858951  0.52750372  0.83566541]]
    print np.random.rand(2,5)#  
    print np.random.randint(2,size=5)#5     [0,2)
    print np.random.randint(2,5,size=5)#5     [2,5)
    # 0  1
    print np.zeros(3)#[ 0.  0.  0.  0.  0.]
    print np.zeros((3,3))#     0        
    
    の注意を維持します.
  • total size of new array must be unchanged
  • 配列aおよびdは、データ記憶メモリ領域を共有するため、いずれかの配列を変更する要素は、他の配列の内容
  • を同時に変更する.

    アクセスデータ
  • 配列要素のアクセス方法はPythonの標準方法と同じである.
  • とPythonのリストシーケンスは異なり、下付き範囲で取得された新しい配列は元の配列のビューです.元の配列と同じデータ空間
  • を共有します.
  • はブール配列を用いる、ブール配列を下付きとして用いて得られる配列は元の配列とデータ空間
    a=np.array([[1,2,3,4],[2,3,4,5]])
    print a.shape,a.size,a.dtype
    //(2, 4) 8 int32
    d=a.reshape((4,-1))
    //[[1 2],[3 4],[2 3],[4 5]]
    
  • を共有しない.
    きほんえんざん
  • 配列の算術演算は要素別である.a= np.arange(5) b=np.zeros(5) print a-b#[ 0. 1. 2. 3. 4.] print a*b#[ 0. 0. 0. 0. 0.]
  • NumPyの乗算演算子*は、dot関数を使用するか、マトリクスオブジェクトを作成して実装できる要素で計算されることを示します.dot関数は,1次元を処理する場合に点乗,2次元を処理する場合に行列乗算である.a=np.array([1,2,3]) b=np.array([3,2,1]) print np.dot(a,b)#10 aa=np.array([[1,1]]) bb=np.arange(1,5).reshape(2,-1) print np.dot(aa,bb)#[[4 6]]

  • 関数とメソッド
    参考文献
    Numpyチュートリアル1 Numpyチュートリアル2 Numpyドキュメント