Numpyの概要

4067 ワード

numpy
[TOC]
概要
標準的にインストールされているPythonではリスト(list)で値のセットを保存し、配列として使用できますが、リストの要素は任意のオブジェクトであるため、リストに保存されているのはオブジェクトのポインタです.このように単純な[1,2,3]を保存するには,3つのポインタと3つの整数オブジェクトが必要である.数値演算にとって,この構造はメモリとCPUの計算時間を明らかに浪費している.
NumPyの誕生はこれらの不足を補い、NumPyはndarray(N-dimensional array object)とufunc(universal function object)の2つの基本的なオブジェクトを提供した.ndarray(以下、配列と総称する)は、単一のデータ型を格納する多次元配列であり、ufuncは配列を処理できる関数である
パッケージのインポート
import numpy as np

ndarrayオブジェクト
ndarrayオブジェクトは、同じデータ型を格納し、整数でインデックスされたコンテンツを格納する同質の多次元配列です.以下に、オブジェクトのプロパティを示します.
  • ndarray.ndim:オブジェクトの次元数
  • ndarray.shape:各次元の深さ
  • ndarray.size:配列内の合計要素数
  • ndarray.dtype:配列内の要素のタイプ
  • ndarray.itemsize:配列要素のバイトサイズ.たとえば、ある要素が数バイトである.

  • 一般的な関数
    作成
  • array関数にPythonのシーケンスオブジェクトを渡すことで配列を作成できます.多層ネストされたシーケンスを渡すと、多次元配列(次の例の変数c)pythonのシーケンスオブジェクトが作成されます.リスト、要素
  •  np.array([1.2, 3.5, 5.1])
     np.array(1,2,3,4)    # WRONG
    np.array([(1.5,2,3), (4,5,6)]
    np.array( [ [1,2], [3,4] ], dtype=complex )
    

    2つ目はよく犯すエラーで、arrayを複数の数値で直接呼び出します.データ型は、シーケンスオブジェクトの要素から押し倒されます.
  • 作成サイズ既知、要素値初期化ndarray.
  • np.zeros( (3,4) )  #    (3,4)   ,    0
    np.ones( (2,3,4), dtype=np.int16 ) # dtype can also be specified
    np.empty( (2,3) ) #     ,           
    np.arange( 10, 30, 5 ) #        ,  :  (  0),  ,  (  1)
    np.arange( 0, 2, 0.3 ) #array([ 0. ,  0.3,  0.6,  0.9,  1.2,  1.5,  1.8])
    np.linspace( 0, 2, 9 )  #          9 numbers from 0 to 2       
    

    作成後のシーケンスはreshapeを使用して配列の次元を変更できます.
    x=np.linspace( 0, 2, 9 )
    x.reshape(3,3)  #       
    

    残りの関数は次のとおりです.
    numpy.random.rand(d0, d1, ..., dn) #      ,        ,  [0,1)     
    numpy.random.randn(d0, d1, ..., dn)#                
    sigma * np.random.randn(...) + mu  #         
    umpy.fromfunction(function, shape, **kwargs)[source]¶
    numpy.fromfile #      ,            
    

    参照先:https://docs.scipy.org/doc/numpy-dev/user/quickstart.html
    印刷
    印刷のルールは次のとおりです.
    >>> c = np.arange(24).reshape(2,3,4)         # 3d array
    >>> print(c)
    [[[ 0  1  2  3]
      [ 4  5  6  7]
      [ 8  9 10 11]]
     [[12 13 14 15]
      [16 17 18 19]
      [20 21 22 23]]]
    

    きほんそうさ
  • が配列に適用される基本的な動作はelementwiseである.結果は新しい配列を返します.
  • >>> 10*np.sin(a)
    array([ 9.12945251, -9.88031624,  7.4511316 , -2.62374854])
    
  • *オペレータはelementwiseでnumpyのマトリクス乗算はdot
  • です.
  • +=,*=演算子既存の多次元配列
  • をその場で修正
    a=np.ones((3,3),dtype=int)
    a*=3
    >>> a
    array([[3, 3, 3],
           [3, 3, 3]])
    
  • 多くの基本操作はndarrayクラスに直接適用されます.例えば、
  • >>> a = np.random.random((2,3))
    >>> a
    array([[ 0.18626021,  0.34556073,  0.39676747],
           [ 0.53881673,  0.41919451,  0.6852195 ]])
    >>> a.sum()
    2.5718191614547998
    >>> a.min()
    0.1862602113776709
    >>> a.max()
    0.6852195003967595
    

    デフォルトでは、これらの操作は次元情報にかかわらず、価格ndarrayをリストとして使用しますが、axisパラメータを指定してより細かい粒度の計算を行うことができます.
    >>> b = np.arange(12).reshape(3,4)
    >>> b
    array([[ 0,  1,  2,  3],
           [ 4,  5,  6,  7],
           [ 8,  9, 10, 11]])
    >>>
    >>> b.sum(axis=0)                            # sum of each column
    array([12, 15, 18, 21])
    >>>
    >>> b.min(axis=1)                            # min of each row
    array([0, 4, 8])
    

    arrayの次元情報:
  • グローバルの関数numpyはいくつかのグローバルの関数
  • を共有した.
  • インデックス、スライス
  • 次元操作
  • 異なる配列の異なる配列を積み重ねて、異なる次元に沿って積み重ねてもよい.
  • >>> a = np.floor(10*np.random.random((2,2)))
    >>> a
    array([[ 8.,  8.],
           [ 0.,  0.]])
    >>> b = np.floor(10*np.random.random((2,2)))
    >>> b
    array([[ 1.,  8.],
           [ 0.,  4.]])
    >>> np.vstack((a,b))
    array([[ 8.,  8.],
           [ 0.,  0.],
           [ 1.,  8.],
           [ 0.,  4.]])
    >>> np.hstack((a,b))
    array([[ 8.,  8.,  1.,  8.],
           [ 0.,  0.,  0.,  4.]])
    

    参照先:https://docs.scipy.org/doc/numpy-dev/user/quickstart.html
  • レプリケーションおよびビュー