Pythonのデータ分析-Numpy

numpyの特長

次の特性を持つ共通ライブラリとしてのPythonとnumpyの科学技術計算、:

  • N次元アレイ(行列)、高速かつ効率的なベクトル演算を提供します。
  • 効率的なインデックスは、C言語を使用して基礎となる実装するので、サイクルを必要としません。

配列と行列の一般的な方法

情報の配列や行列の次元を作成します
  • numpy.array()

    ## 数组的创建
    vector = numpy.array([1,2,3,4])
    
    ## 矩阵的创建
    matrix = numpy.array([
        [1,2,3],
        [4,5,6],
        [7,8,9]
    ])
  • 形状

    ## 打印数组的维度信息
    vector.shape() ——》(4,) # 数组中存在4个元素
    
    ## 打印矩阵的维度信息
    matrix.shape()——》(3,3) #三行三列
  • 作り直します

    eg:
    a = np.arange(15).reshape(3, 5) #随机创建3行5列的矩阵
    Out:
       [[ 0  1  2  3  4]
       [ 5  6  7  8  9]
       [10 11 12 13 14]]
    a.ndim # 返回其维数 即 2

    注意:

    • 新しい配列のサイズを作成する再構築が変更されましたが、元の配列の形状が変更されません。

    • RESHAPE(-1) 属性アレイは、元と一致しなければならない新しい形状は、-1に等しい場合、形状numpyのは、さらに、アレイの残りの寸法に基づいて、属性値を算出します。

      eg:
      z = np.array([[1, 2, 3, 4],
                [5, 6, 7, 8],
                [9, 10, 11, 12],
                [13, 14, 15, 16]])
      z.shape
        Out:(4, 4)
      z.reshape(-1)
        Out:array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16])
    • RESHAPE(-1,1) 状況の行数を知らなくても、データに

      eg:
      z.reshape(-1,1)
      Out:array([[ 1],
              [ 2],
              [ 3],
              [ 4],
              [ 5],
              [ 6],
              [ 7],
              [ 8],
              [ 9],
              [10],
              [11],
              [12],
              [13],
              [14],
              [15],
              [16]])
      
    • RESHAPE(-1,2)は:行数を知らなくても、データは2に変換されます。

      eg:
      z.reshape(-1, 2)
      Out:array([[ 1,  2],
              [ 3,  4],
              [ 5,  6],
              [ 7,  8],
              [ 9, 10],
              [11, 12],
              [13, 14],
              [15, 16]])
  • linspace

    • 一般に、アレイ機能は市配列を変換することによって、これは効率的ではない、Pythonのシーケンスを作成するが、arange機能が開始を指定することができ、直接ステップの最終的な値は、(配列ストップ値を含まない)一次元アレイを作成します。

    • 一次元アレイを作成するために、開始値、最終値、および要素数を指定して関数linspace。しかし、あなたは、キーのエンドポイントによって最終的な値を含めるかどうかを指定し、デフォルト値のデフォルトにと終了値を含むことができます。

      eg:
      np.linspace(0, 1, 10) # 步长为1/9
      Out:——》array([ 0. , 0.11111111, 0.22222222, 0.33333333, 0.44444444,0.55555556, 0.66666667, 0.77777778, 0.88888889, 1. ])
      
      
  • ログ・スペース

    ログ・スペースとlinspace同様の機能が、それは幾何学的なシーケンスを作成し、

    eg:
    np.logspace(0, 2, 20) # 产生1(10^0)到100(10^2)、有20个元素的等比数列
    
    array([ 1. ,    1.27427499,   1.62377674,    2.06913808,
    2.6366509 ,   3.35981829,   4.2813324 ,    5.45559478,
    6.95192796,  8.8586679 ,    11.28837892, 14.38449888,
    18.32980711, 23.35721469, 29.76351442, 37.92690191,
    48.32930239, 61.58482111, 78.47599704, 100. ])
  • ゼロ()、のもの()、空() 所定の形状及びタイプの配列を作成します

    zeros_like()、ones_like()、 empty_like() 関数など、形状及び配列の配列のパラメータの同じ種類を作成することができます。したがって、 "zeros_like(A)"と"ゼロ(a.shape、
    同じa.dtype)"効果

    1.zeros(,dtype) == zeros_like() ——零矩阵
    eg:
    np.zeros(4, np.float) #元素类型默认为np.float,因此这里可以省略
    array([ 0., 0., 0., 0.])
    
    2.ones()——元素全部为1的矩阵
    eg:
    numpy.ones((3,4),numpy.int) # 3行4列,元素类型为int且全部为1的矩阵
    array([[1, 1, 1, 1],
           [1, 1, 1, 1],
           [1, 1, 1, 1]])
    
    3.empty()——空矩阵
    eg:
    np.empty((2,3),np.int) #只分配内存,不对其进行初始化
    array([[ 32571594, 32635312, 505219724],
              [ 45001384, 1852386928, 665972]])
    
要素にアクセスし、取得
  • スライス(ランクに従って取得)
    注:操作をスライスするとき、あなたは三番目のパラメータである、インデックス付きたくないi番目の終わりに最初から開始するインデックスを示すことは手順が取ら示し

    ## 数组获取元素
    vector[0:3]  #表示的是从第一个元素开始截取,获取三个元素,返回[1,2,3]
    
    ## 矩阵获取元素
    matrix[1:,0:2] # 从二列开始,获取第一列和第二列,返回([
        [4,5],
        [7,8]
    ])
  • 状況に応じて調達

    eg:
    a = vector[vector > 3] # 截取数组中所有元素大于3的,返回[4]
    a = vector[vector == 4] # 截取数组中元素等于4的数组,如果不存在的话,返回一个空数组
    
    b = matrix[matrix > 5] # 截取矩阵中所有元素大于5,返回结果是一个一维数组,即[6,7,8,9]
    b = matrix[matrix == 9] # 返回的是一个boolean矩阵,结果[
        [False,False,False],
        [False,False,False],
        [Fasle,False,True]
    ]
    • アイテムを混乱させる

      1. 数组比较和按照条件截取数组内容的返回结果是不相同的
      eg:
      print(vector == 3) # 返回的是将数组的元素逐一比较,返回的是一个boolean数组
      
      print(vector[vector==3]) # 返回的是截取数组中满足条件的数组
      
      2. 矩阵比较和按照条件截取矩阵内容的返回结果是不相同的
      eg:
      print(matrix == 3) # 返回的是将矩阵的元素逐一比较,返回的是一个boolean矩阵
      
      print(matrix[matrix==3]) # 返回的是截取矩阵中满足条件的数组
      
  • 整数アクセサの順序によると、

    整数の配列は配列要素にアクセスする場合、各要素は、リストまたはアレイであってもよい添字整数配列として整数のシーケンスで使用されるであろう。配列インデックスが得られると、元のアレイがデータ・スペースを共有していないように整数のシーケンスを使用。これは、変更された場合は、元の配列が中にある変更されません取得した新しい配列です。前の二つの用語と比較すると、このアクセス・モードが有効です。

    eg:
    a = numpy.linspace(0,1,10,endpoint=False)
    a
    >> array([0. , 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9])
    
    # 按照整数序列,选取第4个、第6个、第8个、第10个元素进行组成新的数组
    b = a[[3,5,7,9]]
    b
    >> array([0.3, 0.5, 0.7, 0.9])
    
    # 按照序列修改对应位置的值
    b[[0,1,2]]= -1,-2,-3
    b
    >> array([-1. , -2. , -3. ,  0.9])
  • ブール配列を使用

    配列アクセスブール配列b添字xの要素として使用する場合、アレイは、アレイ内のすべての要素は、添字bに対応する真の収集xは。唯一のブール配列を配列インデックスが元の配列に得られないようにブール配列を使用して、そしてこのように音符に対応する共有データ空間は、ブールリストを使用することができます。

  • 注意:

    • また、新しい配列の添字の範囲で取得した異なる配列のリストPythonは、元の配列の図です。これは、元の配列データ空間の同じ部分共有言うことです、新しい配列要素が変更され、元の配列も変更されます
共通操作
  • eg:
     # 数组求和
    
     # 矩阵求和
     # The axis dictates which dimension we perform the operation on
     #1 means that we want to perform the operation on each row, and 0 means on each column
     matrix = numpy.array([
                     [5, 10, 15], 
                     [20, 25, 30],
                     [35, 40, 45]
                  ])
     matrix.sum(axis=1) # axis=1表示按照每一行进行求和,axis=0表示按照每一列进行求和
  • プロダクト

    eg:
    #The matrix product can be performed using the dot function or method
    A = numpy.array([
        [1,2],
        [3,4]
    ])
    B = numpy.array([
        [1,1],
        [4,6]
    ])
    
    # 普通的乘积
    multi = A * B
    print(multi)
    》》[[ 1  2]
        [12 24]]
    
    ## 点积运算
    resultdot = numpy.dot(A,B)
    print(resultdot)
    》》[[ 9 13]
        [19 27]]
    
    # flatten the array 铺平
    print(A.ravel())
    》》[1 2 3 4]
    
    # 横向拼接/纵向拼接
    print(numpy.vstack((A,B)))/numpy.hstack((A,B))
    》》[[1 2]
        [3 4]
        [1 1]
        [4 6]]
    
  • 平均と分散

    • ()平均パラメータは出力配列を介して指定し、シャフト軸パラメータを求め、平均することによりアレイを平均化するために指定されてもよいです。およびアレイの他のタイプのに対し、倍精度浮動小数点計算を使用する整数のアレイ、および累積変数の計算の同じタイプの配列要素のそれ以外の和()。

    • 平均値()配列を平均することにより算出することができます。それはアウトとDTYPEパラメータではなく、各パラメータ要素の重みの指定された重みがあります。

    • STD()VAR()は、標準偏差と分散アレイが算出したOUTとDTYPEのパラメータを。

      eg:
      f = numpy.array([[ 0,  1,  2,  3,  4,  5],
             [10, 11, 12, 13, 14, 15],
             [20, 21, 22, 23, 24, 25],
             [30, 31, 32, 33, 34, 35],
             [40, 41, 42, 43, 44, 45],
             [50, 51, 52, 53, 54, 55]])
       ## 均值
      f.mean(f,axis=1) #整数数组使用双精度浮点数进行计算 
      >> array([ 2.5, 12.5, 22.5, 32.5, 42.5, 52.5])
      
      ## 方差
      numpy.var(f,axis=1)
      》》array([2.91666667, 2.91666667, 2.91666667, 2.91666667, 2.91666667,
             2.91666667])
      
      ## 标准差
      numpy.std(f,axis=1)
      》》array([1.70782513, 1.70782513, 1.70782513, 1.70782513, 1.70782513,
             1.70782513])
  • 三種類は、操作Tをトランスポーズトランスポーズ、swapaxes

    • Tは、共通の転置であります
    • これは、軸変換転置を所属します
    • 実際にswapaxes、変更の行列の二つの軸は、軸対称であります
    arr = numpy.arange(24).reshape((2, 3, 4))
    arr
    》》array([[[ 0,  1,  2,  3],
            [ 4,  5,  6,  7],
            [ 8,  9, 10, 11]],
    
           [[12, 13, 14, 15],
            [16, 17, 18, 19],
            [20, 21, 22, 23]]])
    ## 转置       
    arr.T
    》》
    array([[[ 0, 12],
            [ 4, 16],
            [ 8, 20]],
    
           [[ 1, 13],
            [ 5, 17],
            [ 9, 21]],
    
           [[ 2, 14],
            [ 6, 18],
            [10, 22]],
    
           [[ 3, 15],
            [ 7, 19],
            [11, 23]]])
    
    ## 将轴1和轴0互换,轴2不变,原始是(0,1,2)
    arr.transpose(1,0,2)
    》》array([[[ 0,  1,  2,  3],
            [12, 13, 14, 15]],
    
           [[ 4,  5,  6,  7],
            [16, 17, 18, 19]],
    
           [[ 8,  9, 10, 11],
            [20, 21, 22, 23]]])
    
    ## 将轴1和轴0互换,原始是(0,1)
    arr.swapaxes(1, 0)
    》》array([[[ 0,  1,  2,  3],
            [12, 13, 14, 15]],
    
           [[ 4,  5,  6,  7],
            [16, 17, 18, 19]],
    
           [[ 8,  9, 10, 11],
            [20, 21, 22, 23]]])
  • ほとんどの値およびソート

    • MAX()、分()の最大値と最小値を求めて

    • 最大値と最小値PTP()との差を算出します

    • ARGMAX()とargmin()を使用すると、インデックスの最大値と最小値を見つけることができます。無軸パラメータ場合は、平坦化後の配列の添字を返します

    • ソート配列()メソッドは、配列をソートするために使用され、それが配列の内容を変更します。ソート()関数は、元の配列を変更せずに新しい配列を返しますその軸パラメータのデフォルト値は-1、すなわち、アレイの軸に沿って最終的なソート。
      ソート()軸の関数のパラメータをNoneに設定することができる、新しい配列になるだろう、この時間は、平坦化後に順序付けられています。

    • デフォルトargsort()はjiongが、配列添え字ソート戻り、軸パラメータは-1

    • ()の中央値は、配列値は、配列をソートするために、すなわち、得ることができ、配列は、長さが2つの数値を与えるために偶数、中間の平均値である値の中間位置に配置されています。また、軸とoutパラメータを指定することができます

    • eg:
      a2 = floor(10*random.random((2,2))) 
      >>> a2 
      array([[ 1., 1.],
             [ 5., 8.]])
      >>>np.min(a2) # 最小值
      1.0
      >>>np.max(a2) # 最大值
      9.0
      >>>np.ptp(a2) # 最大最小值的差值
      8.0
      >>> np.argmax(a) #找到数组a中最大值的下标,有多个最值时得到第一个最值的下标 
      2
      >>> idx = np.argmax(a, axis=1)
      >>> idx
      array([2, 3, 0, 0])
      ## 使用xrange()选择出每行的最大值
      >>> a[xrange(a.shape[0]),idx]
      array([9, 8, 9, 9])
      
      >>> np.sort(a, axis=0) #对每列的数据进行排序 array([[5,1,1, 4, 0],
                [7, 1, 3, 6, 0],
                [9, 5, 9, 7, 2],
                [9, 8, 9'8, 3]])
  • 軸の方向に複製--tile

    eg:
    a = numpy.arange(0, 40, 10)
    a
    》》array([ 0, 10, 20, 30])
    
    ## 将数组作为元素复制成3行5列的矩阵
    b = numpy.tile(a, (3, 5)) 
    b
    》》array([[ 0, 10, 20, 30,  0, 10, 20, 30,  0, 10, 20, 30,  0, 10, 20, 30,
             0, 10, 20, 30],
           [ 0, 10, 20, 30,  0, 10, 20, 30,  0, 10, 20, 30,  0, 10, 20, 30,
             0, 10, 20, 30],
           [ 0, 10, 20, 30,  0, 10, 20, 30,  0, 10, 20, 30,  0, 10, 20, 30,
             0, 10, 20, 30]])
ファンクションモジュール
  • numpy.linalg機能モジュールは、線形代数が含まれています。決定要因のために、このモジュールを使用して、逆行列は、固有値、線形方程式を計算することができる、等

    • 行列反転に

      逆行列INV numpy.linalgモジュールの機能を使用して計算され、決定された逆行列の乗算行列によって得られた元の行列との結果を確認します。

      eg:
      A = np.mat("0 1 2;1 0 3;4 -3 8") #使用mat函数创建矩阵
      ## 求逆
      inverse = np.linalg.inv(A)
    • 関数Aは行列である線形方程式の形でAx = bのを解くnumpy.linalgを解決することができ、bは1次元または2次元アレイであり、xは未知変数であります
      eg:
      A = np.mat("0 1 2;1 0 3;4 -3 8") #使用mat函数创建矩阵
      b = np.array([0, 8, -9])
      ## 求解
      x = np.linalg.solve(A, b)
    • 固有値と固有ベクトル関数--eigvals

      特性値(固有値)式斧= AX即ち根は、スカラーです。、Aが2次元マトリクスであり、xは1次元ベクトルです。特徴ベクトル(固有ベクトル)は、上の特徴値のベクトルです。numpy.linalgモジュールにおいて、eigvals関数は固有値行列を算出してもよいし、関数eigは、固有値を含み、対応するタプルを返すことができます。

    • 特異値分解
      numpy.linalgのSVD機能モジュールには、行列の特異値分解であってもよいです。関数は、行列U及びVは、特異値を含む直交行列、シグマ入力行列である--U 3、シグマ、およびVを返します。
概要
  • 特徴情報

    X.flags    #数组的存储情况信息。
    
    X.shape    #结果是一个tuple,返回本数组的行数、列数、……
    
    X.ndim   #数组的维数,结果是一个数。
    
    X.size    #数组中元素的数量
    
    X.itemsize    #数组中的数据项的所占内存空间大小
    
    X.dtype    #数据类型
    
    X.T   #如果X是矩阵,发挥的是X的转置矩阵
    
    X.trace()    #计算X的迹
    
    np.linalg.det(a)   #返回的是矩阵a的行列式
    
    np.linalg.norm(a,ord=None)    #计算矩阵a的范数
    
    np.linalg.eig(a)    #矩阵a的特征值和特征向量
    
    np.linalg.cond(a,p=None)    #矩阵a的条件数
    
    np.linalg.inv(a)    #矩阵a的逆矩阵
  • 指数

    x=np.arange(10)
    
    print x[2]    #单个元素,从前往后正向索引。注意下标是从0开始的。
    
    print x[-2]    #从后往前索引。最后一个元素的下标是-1
    
    print x[2:5]    #多个元素,左闭右开,默认步长值是1
    
    print x[:-7]    #多个元素,从后向前,制定了结束的位置,使用默认步长值
    
    print x[1:7:2]   #指定步长值
    
    x.shape=(2,5)    #x的shape属性被重新赋值,要求就是元素个数不变。2*5=10
    
    print x[1,3]    #二维数组索引单个元素,第2行第4列的那个元素
    
    print x[0]   #第一行所有的元素
    
    y=np.arange(35).reshape(5,7)    #reshape()函数用于改变数组的维度
    
    print y[1:5:2,::2]    #选择二维数组中的某些符合条件的元素
    

おすすめ

転載: www.cnblogs.com/cecilia-2019/p/11368223.html