1. 程式人生 > >numpy 模組學習記錄一

numpy 模組學習記錄一

1、 以下測試np.tile()函式的功能(對一維陣列使用)

>>> c =[1,2,3,4]

>>> import numpy as np
>>> a = np.array(c)
>>> a
array([1, 2, 3, 4])
>>> np.tile(a,2)
array([1, 2, 3, 4, 1, 2, 3, 4])
>>> np.tile(a,(2,2))
array([[1, 2, 3, 4, 1, 2, 3, 4],
       [1, 2, 3, 4, 1, 2, 3, 4]])
>>> np.tile(a,(2,1))
array([[1, 2, 3, 4],
       [1, 2, 3, 4]])
>>> np.tile(a,(2,2,2))
array([[[1, 2, 3, 4, 1, 2, 3, 4],
        [1, 2, 3, 4, 1, 2, 3, 4]],
       [[1, 2, 3, 4, 1, 2, 3, 4],
        [1, 2, 3, 4, 1, 2, 3, 4]]])
#也可以對二維陣列使用tile函式

>>> a1 = np.array([[1,2,3],[1,1,1]])
>>> np.tile(a1,(2,1))
array([[1, 2, 3],
       [1, 1, 1],
       [1, 2, 3],
       [1, 1, 1]])
>>> np.tile(a1,(2,2))
array([[1, 2, 3, 1, 2, 3],
       [1, 1, 1, 1, 1, 1],
       [1, 2, 3, 1, 2, 3],

       [1, 1, 1, 1, 1, 1]])

#注意一維陣列的轉置還是一維陣列,因此如果想把(3,)換成(3,1)的話,必須先通過tile(a,(1,1)),之後再轉置一下。

>>> a
array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16,
       17, 18, 19])

>>> np.tile(a,(1,1))
array([[ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15,
        16, 17, 18, 19]])
>>> np.tile(a,1)
array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16,
       17, 18, 19])
>>> a.T
array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16,
       17, 18, 19])
>>> np.tile(a,(1,1)).T
array([[ 0],
       [ 1],
       [ 2],
       [ 3],
       [ 4],
       [ 5],
       [ 6],
       [ 7],
       [ 8],
       [ 9],
       [10],
       [11],
       [12],
       [13],
       [14],
       [15],
       [16],
       [17],
       [18],
       [19]])

2、建立陣列

  • np.array函式可以新增資料型別引數('int64','float64'),也可以使用a = np.array(), b = a.astype('float64')來改變資料型別
  • np.zeros(shape), np.ones(shape), np.empty(shape)
  • np.eye(N)建立NXN的對角陣(對角線為1,其餘為0)
  • np.random.randn(shape)可用來建立正態分佈的隨機數字組成的陣列
  • 可以用陣列物件的reshape(shape)方法輕鬆將一維陣列重建shape形狀陣列,也可以使用陣列的flatten()方法輕鬆將陣列變為一維陣列。Flatten()和ravel()用法一樣,區別在於後者是共用記憶體,前者複製
  • reshape也有np.reshape(a,(shape),order=‘C/A/F’)的用法,一樣的,此外也可以對多維陣列採用此方法。不限於一維展平陣列
  • 不同方法建立等差數列:已知首尾和個數使用np.linspace(首,尾,個數),已知首尾和等差使用np.arange(首,尾,等差)
np.linspace(-4.1,3.2,10)
array([-4.1       , -3.28888889, -2.47777778, -1.66666667, -0.85555556,

       -0.04444444,  0.76666667,  1.57777778,  2.38888889,  3.2       ])

np.arange(-4.1,3.2,0.13)
array([-4.1 , -3.97, -3.84, -3.71, -3.58, -3.45, -3.32, -3.19, -3.06,
       -2.93, -2.8 , -2.67, -2.54, -2.41, -2.28, -2.15, -2.02, -1.89,
       -1.76, -1.63, -1.5 , -1.37, -1.24, -1.11, -0.98, -0.85, -0.72,
       -0.59, -0.46, -0.33, -0.2 , -0.07,  0.06,  0.19,  0.32,  0.45,
        0.58,  0.71,  0.84,  0.97,  1.1 ,  1.23,  1.36,  1.49,  1.62,
        1.75,  1.88,  2.01,  2.14,  2.27,  2.4 ,  2.53,  2.66,  2.79,
        2.92,  3.05,  3.18])

  • 不同方法建立等比數列:已知首尾和個數使用np.geomspace(首,尾,個數),已知首尾指數、基和個數使用np.logspace(首指數,尾指數,個數num,基base)
>>> np.geomspace(4.1,3.2,10)
array([4.1       , 3.98863721, 3.88029923, 3.77490388, 3.67237124,

       3.57262356, 3.47558519, 3.38118254, 3.28934403, 3.2       ])

 >>> np.logspace(-3,6,num=20,base = 3.5)
array([2.33236152e-02, 4.22194245e-02, 7.64238216e-02, 1.38339179e-01,
       2.50415747e-01, 4.53292024e-01, 8.20530104e-01, 1.48528899e+00,
       2.68860749e+00, 4.86680388e+00, 8.80968312e+00, 1.59469168e+01,
       2.88664363e+01, 5.22528056e+01, 9.45858249e+01, 1.71215271e+02,
       3.09926663e+02, 5.61016174e+02, 1.01552782e+03, 1.83826562e+03])

>>> np.zeros((2,2,3))

array([[[0., 0., 0.],

        [0., 0., 0.]],

       [[0., 0., 0.],

        [0., 0., 0.]]])

>>> np.ones((2,2),'int8')

array([[1, 1],

       [1, 1]], dtype=int8)

>>> np.empty(2,3)

Traceback (most recent call last):

  File "<pyshell#22>", line 1, in <module>

    np.empty(2,3)

TypeError: data type not understood

>>> np.empty((2,3))

array([[4.24399158e-314, 2.12199579e-314, 2.12199579e-314],

       [4.24399158e-314, 2.12199579e-314, 2.12199579e-314]])

>>> np.eye(3)
array([[1., 0., 0.],
       [0., 1., 0.],

       [0., 0., 1.]])

>>> np.random.randn(4,5)
array([[ 1.21889591,  1.17788445,  1.11458146,  0.92636185, -0.63262038],
       [-0.98822116, -0.06948648, -1.8468231 ,  0.01933874, -1.14357655],
       [ 1.12872851,  0.22839521, -0.15845981, -0.73015856, -1.33538379],

       [ 0.22462804, -0.06954899,  0.03237714,  1.3185228 , -0.927427  ]])

a
array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16,
       17, 18, 19])
>>> x = a.reshape(4,5)
>>> x
array([[ 0,  1,  2,  3,  4],
       [ 5,  6,  7,  8,  9],
       [10, 11, 12, 13, 14],
       [15, 16, 17, 18, 19]])
>>> x.flatten()
array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16,
       17, 18, 19])

3、np.arange函式相當於內建函式range的陣列版

    >>> np.arange(6)

array([0, 1, 2, 3, 4, 5])

np.arange(0,10,0.5)
array([ 0. ,  0.5,  1. ,  1.5,  2. ,  2.5,  3. ,  3.5,  4. ,  4.5,  5. ,
        5.5,  6. ,  6.5,  7. ,  7.5,  8. ,  8.5,  9. ,  9.5])