《利用python進行數據分析》——Numpy基礎

1、建立數組數組

一、建立數組的函數less

  • array:將輸入數據(列表、元組、數組或其餘序列類型)轉換爲ndarray,可用dtype指定數據類型。
>>> import numpy as np >>> a=np.array([1,2,3]) >>> a array([1, 2, 3]) >>> c=np.array([1,2,3],dtype=float) #使用的type指定數據類型
>>> c
array([ 1.,  2.,  3.])
>>> c=c.astype(int) #使用astype更改數據類型
>>> c
array([1, 2, 3])
  •  arange:相似於range,但返回的不是列表而是ndarray。
>>> g=np.arange(5) >>> g array([0, 1, 2, 3, 4]) >>> k=np.arange(6).reshape(2,3) >>> k array([[0, 1, 2], [3, 4, 5]])
  •  ones、ones_like:建立全是1的數組。
>>> c=np.ones((2,3),dtype=np.int) >>> c array([[1, 1, 1], [1, 1, 1]]) >>> d=np.ones_like(c) #d的形狀和dtype與c相同 >>> d array([[1, 1, 1], [1, 1, 1]])
  •  zeros、zeros_like:建立全是0的數組。
>>> f=np.zeros((2,3,2)) >>> f array([[[ 0., 0.], [ 0., 0.], [ 0., 0.]], [[ 0., 0.], [ 0., 0.], [ 0., 0.]]]) >>> g=np.zeros_like(f) #g的形狀和dtype與f相同 >>> g array([[[ 0., 0.], [ 0., 0.], [ 0., 0.]], [[ 0., 0.], [ 0., 0.], [ 0., 0.]]])
  • empty,empty_like:建立新數組,只分配內存但不填充任何值。

注:empty數據並非空的數組,也不是全爲0的數組,它返回的是一些未初始化的垃圾值。dom

>>> k=np.empty((2,3))
>>> k
array([[  6.23042070e-307,   3.56043053e-307,   1.37961641e-306],
       [  8.06612192e-308,   2.22523004e-307,   2.44031977e-312]])
>>> g=np.empty_like(k) #g的形狀和dtype與k相同
>>> g
array([[  6.23042070e-307,   3.56043053e-307,   1.37961641e-306],
       [  8.06612192e-308,   2.22523004e-307,   2.44031977e-312]])
  • eye、identity:建立一個正方的N*N的單位矩陣(對角線爲1,其餘爲0)

np.eye(N, M=None, k=0, dtype=<type ‘float’>)
能夠建立矩形矩陣,且k值能夠調節,爲1的對角線的位置偏離度,0居中,1向上偏離1,2偏離2,以此類推,-1向下偏離。值絕對值過大就偏離出去了,整個矩陣就全是0了。ide

>>> l=np.eye(3,4,1)  #3行4列,爲1的對角線向上移一位
>>> l array([[ 0., 1., 0., 0.], [ 0., 0., 1., 0.], [ 0., 0., 0., 1.]]) >>> l1=np.eye(3,3,-1) #3行3列,爲1的對角線向下移一位
>>> l1 array([[ 0., 0., 0.], [ 1., 0., 0.], [ 0., 1., 0.]]) >>> j=np.identity(3)  #建立方形單位矩陣(對角線爲1,其他爲0)
>>> j array([[ 1., 0., 0.], [ 0., 1., 0.], [ 0., 0., 1.]])

 

二、Numpy的數據類型函數

 

三、 查看數組維度、數組形狀、數據類型測試

>>> a=np.random.randn(4,3) >>> a array([[-1.67075275, -0.53713536, -1.54479383], [-0.95460603,  2.097174  , -0.61332423], [-1.92818377, -0.00663392,  1.34561876], [ 0.54646619, -0.85965155, -0.70237827]]) >>> a.ndim  #查看維度
2

>>> a.shape  #查看形狀
(4, 3) >>> a.dtype  #查看數據類型
dtype('float64')

 

2、索引、切片spa

  • 利用行列號索引、切片
>>> a array([[0, 1, 2], [3, 4, 5]]) >>> a[0] array([0, 1, 2]) >>> a[0][2] 2

>>> a[0][1:] array([1, 2]) >>> a[:,:1] array([[0], [3]]) >>> a[:,:2] array([[0, 1], [3, 4]])
  •  利用整數數組作花式索引
>>> a=np.arange(20).reshape(5,4) >>> a array([[ 0, 1,  2,  3], [ 4,  5,  6,  7], [ 8,  9, 10, 11], [12, 13, 14, 15], [16, 17, 18, 19]]) >>> a[[0,2,4]]  #選取第0,2,4行元素
array([[ 0,  1,  2,  3], [ 8,  9, 10, 11], [16, 17, 18, 19]]) >>> a[[0,2,1],[1]] #意爲選取(0,1),(2,1),(1,1)的元素
array([1, 9, 5]) >>> a[[0,2,1]][:,[2,0]]#意爲選取0、二、1行,2,0列的元素
array([[ 2, 0], [10,  8], [ 6,  4]])
  • 條件索引
>>> a=np.random.randn(4,3) >>> a array([[-0.04603611, -1.04144497,  0.78488753], [-0.06099172,  0.31987999,  0.62553966], [-0.44534405, -0.33631437,  0.07821993], [-0.56541056, -0.42975815, -0.65669226]]) >>> a[a<0] array([-0.04603611, -1.04144497, -0.06099172, -0.44534405, -0.33631437, -0.56541056, -0.42975815, -0.65669226]) >>> b=np.array(['rose','lily','tulips','hyacinth']) >>> b==‘lily‘        #條件判斷,返回布爾數組
array([False,  True, False, False], dtype=bool) >>> a[b==‘lily’]     #用布爾數組判斷,返回布爾爲true的行,注行數要與布爾數組的長度相同
array([[-0.06099172,  0.31987999,  0.62553966]]) 

>>> c=(b=='rose')|(b=='lily') #條件或寫法,不能寫成or >>> c #多個條件判斷 array([ True, True, False, False], dtype=bool) >>> a[c] array([[-0.04603611, -1.04144497, 0.78488753], [-0.06099172, 0.31987999, 0.62553966]])

  >>> b!='rose'    #條件非寫法
  array([False,  True,  True,  True], dtype=bool)

  >>> f=(b=='rose')&(b=='lily')  #條件與寫法,不能寫成and
  >>> f
  array([False, False, False, False], dtype=bool)
 

 

 3、數組和標量間的運算code

大小相等的數組間的算術運算會應用到元素級。blog

>>> a=np.arange(6).reshape(2,3) >>> a array([[0, 1, 2], [3, 4, 5]]) >>> a*a array([[ 0, 1,  4], [ 9, 16, 25]]) >>> a+a array([[ 0, 2,  4], [ 6,  8, 10]]) >>> a-a array([[0, 0, 0], [0, 0, 0]]) >>> a/a array([[ nan, 1.,   1.], [ 1.,   1.,   1.]]) >>> a*2 array([[ 0, 2,  4], [ 6,  8, 10]]) >>> a/2 array([[ 0. , 0.5,  1. ], [ 1.5,  2. ,  2.5]]) >>> a**0.5 array([[ 0. , 1.        ,  1.41421356], [ 1.73205081,  2.        ,  2.23606798]])

 

 4、數組轉置和軸對換排序

  • T:轉置
>>> a=np.arange(6).reshape(3,2) >>> a array([[0, 1], [2, 3], [4, 5]]) >>> a.T          #轉置
array([[0, 2, 4], [1, 3, 5]])

 

  •  transpose:傳入一個由軸編號組成的元組,對這些軸進行轉置
>>> arr=np.arange(16).reshape(2,2,4) >>> arr array([[[ 0, 1,  2,  3], [ 4,  5,  6,  7]], [[ 8,  9, 10, 11], [12, 13, 14, 15]]]) >>> arr.transpose(0,2,1)  #transpose(行、列、層)分別用數字0,1,2表明,arr.transpose(0,2,1)意爲列、層對換
array([[[ 0,  4], [ 1,  5], [ 2,  6], [ 3,  7]], [[ 8, 12], [ 9, 13], [10, 14], [11, 15]]])
  •  swapaxes:接受一對軸編號
>>> arr.swapaxes(1,2)    #接受一對軸編號,列、層對調
array([[[ 0,  4], [ 1,  5], [ 2,  6], [ 3,  7]], [[ 8, 12], [ 9, 13], [10, 14], [11, 15]]])

 

 5、函數

  • abs,fabs   :計算整數、浮點數、複數的絕對值,對於非複數,fabs更快
>>> a=np.random.randn(3,4) >>> a array([[ 1.38259684,  1.5849254 ,  0.4449462 ,  0.2385593 ], [ 1.00091383, -1.09375872, -0.02773304,  0.53630798], [ 0.57737587,  1.60649999, -0.20384362, -1.22109508]]) >>> np.abs(a) array([[ 1.38259684,  1.5849254 ,  0.4449462 ,  0.2385593 ], [ 1.00091383,  1.09375872,  0.02773304,  0.53630798], [ 0.57737587,  1.60649999,  0.20384362,  1.22109508]]) >>> np.fabs(a) array([[ 1.38259684,  1.5849254 ,  0.4449462 ,  0.2385593 ], [ 1.00091383,  1.09375872,  0.02773304,  0.53630798], [ 0.57737587,  1.60649999,  0.20384362,  1.22109508]])
  • sqrt:計算平方根
>>> b=np.arange(4).reshape(2,2) >>> b array([[0, 1], [2, 3]]) >>> np.sqrt(b) array([[ 0. , 1. ], [ 1.41421356,  1.73205081]])
  • square:計算平方
>>> b array([[0, 1], [2, 3]]) >>> np.square(b) array([[0, 1], [4, 9]], dtype=int32)
  • exp計算指數𝑒^𝑥
>>> np.exp(b) array([[ 1.        ,   2.71828183], [ 7.3890561 ,  20.08553692]])
  • log、log十、log二、log1p :分佈爲天然對數(以e爲底),底數爲10的log,底數爲2的log,log(1+x)
>>> c=np.arange(1,10).reshape(3,3) >>> c array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) >>> np.log10(c) array([[ 0. , 0.30103   ,  0.47712125], [ 0.60205999,  0.69897   ,  0.77815125], [ 0.84509804,  0.90308999,  0.95424251]])
  • sign:計算各元素的正負號1(正數)、0(零)、-1(負數)
>>> a array([[ 1.38259684,  1.5849254 ,  0.4449462 ,  0.2385593 ], [ 1.00091383, -1.09375872, -0.02773304,  0.53630798], [ 0.57737587,  1.60649999, -0.20384362, -1.22109508]]) >>> np.sign(a) array([[ 1.,  1.,  1.,  1.], [ 1., -1., -1.,  1.], [ 1.,  1., -1., -1.]])
  • ceil:返回數字的上入整數。
>>> a array([[ 1.38259684,  1.5849254 ,  0.4449462 ,  0.2385593 ], [ 1.00091383, -1.09375872, -0.02773304,  0.53630798], [ 0.57737587,  1.60649999, -0.20384362, -1.22109508]]) >>> np.ceil(a) array([[ 2.,  2.,  1.,  1.], [ 2., -1., -0.,  1.], [ 1.,  2., -0., -1.]])
  • floor:返回數字的下舍整數
>>> a array([[ 1.38259684,  1.5849254 ,  0.4449462 ,  0.2385593 ], [ 1.00091383, -1.09375872, -0.02773304,  0.53630798], [ 0.57737587,  1.60649999, -0.20384362, -1.22109508]]) >>> np.floor(a) array([[ 1.,  1., 0., 0.], [ 1., -2., -1., 0.], [ 0., 1., -1., -2.]])
  •  rint:將各元素四捨五入到最接近的整數
>>> a array([[ 1.38259684,  1.5849254 ,  0.4449462 ,  0.2385593 ], [ 1.00091383, -1.09375872, -0.02773304,  0.53630798], [ 0.57737587,  1.60649999, -0.20384362, -1.22109508]]) >>> np.rint(a) array([[ 1.,  2., 0., 0.], [ 1., -1., -0.,  1.], [ 1.,  2., -0., -1.]])
  •  modf:將數字的小數和整數部分以兩個獨立數組的形式返回
>>> a array([[ 1.38259684,  1.5849254 ,  0.4449462 ,  0.2385593 ], [ 1.00091383, -1.09375872, -0.02773304,  0.53630798], [ 0.57737587,  1.60649999, -0.20384362, -1.22109508]]) >>> np.modf(a) (array([[ 0.38259684,  0.5849254 ,  0.4449462 ,  0.2385593 ], [ 0.00091383, -0.09375872, -0.02773304,  0.53630798], [ 0.57737587,  0.60649999, -0.20384362, -0.22109508]]), array([[ 1.,  1., 0., 0.], [ 1., -1., -0., 0.], [ 0., 1., -0., -1.]]))
  •  isnan:返回一個表示是否爲nan的布爾型數組
>>> a array([[ 1.38259684,  1.5849254 ,  0.4449462 ,  0.2385593 ], [ 1.00091383, -1.09375872, -0.02773304,  0.53630798], [ 0.57737587,  1.60649999, -0.20384362, -1.22109508]]) >>> np.isnan(a) array([[False, False, False, False], [False, False, False, False], [False, False, False, False]], dtype=bool)
  •  isfinite、isinf:分別返回一個表示‘哪些元素是有窮的(非inf 非nan)’,和‘哪些元素是無窮的’布爾型數組
>>> a array([[ 1.38259684,  1.5849254 ,  0.4449462 ,  0.2385593 ], [ 1.00091383, -1.09375872, -0.02773304,  0.53630798], [ 0.57737587,  1.60649999, -0.20384362, -1.22109508]]) >>> np.isfinite(a)      #是不是有窮的(非空即有窮)
array([[ True, True, True, True], [ True, True, True, True], [ True, True, True, True]], dtype=bool) >>> np.isinf(a)         #是不是無窮
array([[False, False, False, False], [False, False, False, False], [False, False, False, False]], dtype=bool)
  •  add:將數組中對應的元素相加
>>> b=np.arange(6).reshape(3,2) >>> b array([[0, 1], [2, 3], [4, 5]]) >>> np.add(b,b) array([[ 0, 2], [ 4,  6], [ 8, 10]])
  • substract:從第一個數組中減去第二個數組
>>> d=np.arange(6,0,-1).reshape(3,2) >>> d array([[6, 5], [4, 3], [2, 1]]) >>> np.subtract(b,d)     #b-d
array([[-6, -4], [-2, 0], [ 2,  4]])
  •  multiply:數組相乘
>>> b array([[0, 1], [2, 3], [4, 5]]) >>> np.multiply(b,b) array([[ 0, 1], [ 4,  9], [16, 25]])
  •  divide,floor_divide:除法、向下整除法
>>> np.divide(b,d)     #b/d
array([[ 0. ,  0.2], [ 0.5,  1. ], [ 2. ,  5. ]]) >>> np.floor_divide(b,d) array([[0, 0], [0, 1], [2, 5]], dtype=int32)
  •  power:計算 第一個數組^第二個數組
>>> f=np.empty((3,2))   #構建一個空數組
>>> f[:]=2     #f中元素都賦值爲2
>>> f array([[ 2.,  2.], [ 2.,  2.], [ 2.,  2.]]) >>> np.power(b,f)      #b^f
array([[  0.,   1.], [ 4.,   9.], [ 16.,  25.]])
  •  maximum,fmax:返回兩個數組中的最大值,fmax忽略nan
>>> b array([[0, 1], [2, 3], [4, 5]]) >>> d array([[6, 5], [4, 3], [2, 1]]) >>> np.maximum(b,d) array([[6, 5], [4, 3], [4, 5]])
  •  minimum,fmin:返回兩個數組中的最小值,fmin忽略nan
>>> np.minimum(b,d) array([[0, 1], [2, 3], [2, 1]])
  • mod:求餘數
>>> np.mod(b,d)    #求b/d的餘數
array([[0, 1], [2, 0], [0, 0]], dtype=int32) >>> np.divide(b,d)
  • copysign:將第二個數組的值的符合複製給第一個數組中的值
>>> f array([[-2., -2.], [ 2.,  2.], [ 2.,  2.]]) >>> np.copysign(b,f)    #把f的符號賦值給b
array([[-0., -1.], [ 2.,  3.], [ 4.,  5.]])
  • greater、greater_equal、less、less_equal、equal、not equal,執行比較運算(>,>=,<,<=,=,!=) ,返回布爾值
>>> b array([[0, 1], [2, 3], [4, 5]]) >>> d array([[6, 5], [4, 3], [2, 1]]) >>> np.equal(b,d) array([[False, False], [False, True], [False, False]], dtype=bool) >>> np.greater(b,d)      #b>d
array([[False, False], [False, False], [ True, True]], dtype=bool)
  •  logical_and,logical_or,logical_xor:執行邏輯運算(&,|,^)
>>> np.logical_and(b,d) array([[False, True], [ True, True], [ True, True]], dtype=bool)
  •  meshgrid:接受兩個一維數組A、B,生成兩個二維數組
>>> points=np.arange(-5,5,1) >>> points array([-5, -4, -3, -2, -1,  0,  1,  2,  3,  4]) >>> xs,ys=np.meshgrid(points,points) >>> xs array([[-5, -4, -3, -2, -1,  0,  1,  2,  3,  4], [-5, -4, -3, -2, -1,  0,  1,  2,  3,  4], [-5, -4, -3, -2, -1,  0,  1,  2,  3,  4], [-5, -4, -3, -2, -1,  0,  1,  2,  3,  4], [-5, -4, -3, -2, -1,  0,  1,  2,  3,  4], [-5, -4, -3, -2, -1,  0,  1,  2,  3,  4], [-5, -4, -3, -2, -1,  0,  1,  2,  3,  4], [-5, -4, -3, -2, -1,  0,  1,  2,  3,  4], [-5, -4, -3, -2, -1,  0,  1,  2,  3,  4], [-5, -4, -3, -2, -1,  0,  1,  2,  3,  4]]) >>> ys array([[-5, -5, -5, -5, -5, -5, -5, -5, -5, -5], [-4, -4, -4, -4, -4, -4, -4, -4, -4, -4], [-3, -3, -3, -3, -3, -3, -3, -3, -3, -3], [-2, -2, -2, -2, -2, -2, -2, -2, -2, -2], [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1], [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [ 1,  1,  1,  1,  1,  1,  1,  1,  1,  1], [ 2,  2,  2,  2,  2,  2,  2,  2,  2,  2], [ 3,  3,  3,  3,  3,  3,  3,  3,  3,  3], [ 4,  4,  4,  4,  4,  4,  4,  4,  4,  4]])

 一維數組A[a1,a2,a3…an],一維數組B[b1,b2,b3…bm],meshgrid生成兩個數組:

  •  sum:求和
>>> a=np.arange(6).reshape(3,2) >>> a array([[0, 1], [2, 3], [4, 5]]) >>> a.sum()    #所有求和
15
>>> a.sum(0)    #對列求和
array([6, 9]) >>> a.sum(1)    #對行求和
array([1, 5, 9])
  •  mean:算數平均數,零長度的數組的mean爲nan
>>> a.mean()     #所有求平均數
2.5
>>> a.mean(0)   #對列求平均數
array([ 2.,  3.]) >>> a.mean(1)    #對行求平均數
array([ 0.5,  2.5,  4.5])
  • max:求最大值
>>> a.max()    #所有求最大值
5
>>> a.max(0)   #對列求最大值
array([4, 5]) >>> a.max(1)   #對行求最大值
array([1, 3, 5])
  • min:求最小值
>>> a.min()    #所有求最小值
0 >>> a.min(0)  #對列求最小值
array([0, 1]) >>> a.min(1)  #對行求最小值
array([0, 2, 4])
  •  argmax,argmin:求最大、最小元素的索引
>>> a.argmax()   #索引的是平鋪的數組
5
>>> a.argmax(0)  #按列索引
array([2, 2], dtype=int32) >>> a.argmax(1)   #按行索引
array([1, 1, 1], dtype=int32) >>> a.argmin() 0 >>> a.argmin(0) array([0, 0], dtype=int32) >>> a.argmin(1) array([0, 0, 0], dtype=int32)
  • cumsum:全部元素累計的和
>>> b array([[2, 2], [2, 3], [4, 5]]) >>> b.cumsum() #對所有元素求累計和,原數組有幾個元素返回的數組中就有幾個元素
array([ 2,  4,  6,  9, 13, 18], dtype=int32)
#[2, 2+2, 2+2+2, 2+2+2+3, 2+2+2+3+4, 2+2+2+3+4+5] >>> b.cumsum(0) #對列求累計和 (b.shape(n,m),返回的數組shape(n,m)) array([[ 2, 2], [ 4, 5], [ 8, 10]], dtype=int32) #[2,2],[2+2,2+3],[2+2+4,2+3+5] >>> b.cumsum(1) #對行求累計和 (b.shape(n,m),返回的數組shape(n,m)) array([[2, 4], [2, 5], [4, 9]], dtype=int32) #[2,2+2],[2,2+3],[4,4+5]
  • cumprod:全部元素的累計積
>>> b array([[2, 2], [2, 3], [4, 5]]) >>> b.cumprod()  #對所有元素求累計積
array([  2,   4,   8,  24,  96, 480], dtype=int32) #[2, 2*2, 2*2*2, 2*2*2*3, 2*2*2*3*4, 2*2*2*3*4*5]
>>> b.cumprod(0) #對列求累計積
array([[ 2,  2], [ 4,  6], [16, 30]], dtype=int32) #[2,2],[2*2,2*3],[2*2*4,2*3*5]

>>> b.cumprod(1) #對行求累計積
array([[ 2,  4], [ 2,  6], [ 4, 20]], dtype=int32) #[2,2*2],[2,2*3],[4,4*5]
  • std:標準差
>>> b.std() 1.1547005383792515

>>> b.std(0) array([ 0.94280904,  1.24721913]) >>> b.std(1) array([ 0. , 0.5,  0.5]
  • var:方差
>>> b.var() 1.3333333333333333

>>> b.var(0) array([ 0.88888889,  1.55555556]) >>> b.var(1) array([ 0. , 0.25,  0.25])
  • unique(x):計算x中的惟一元素,並返回有序結果
>>> b array([[2, 2], [2, 3], [4, 5]]) >>> np.unique(b) array([2, 3, 4, 5])
  • in1d(x,y):獲得一個表示‘x的元素是否包含y’的布爾型數組
>>> np.in1d(b,c) array([ True, True, True, True, False, False], dtype=bool) # b中元素是否在c中,用b的每個元素,與c的元素逐個比較
  • union1d(x,y):計算x、y的並集,並返回有序結果
>>> np.union1d(b,c) array([0, 1, 2, 3, 4, 5])
  • intersect1d(x,y):計算x、y中公共元素,並返回有序結果
>>> a
array([[0, 1],
       [2, 3],
       [4, 5]])
>>> b
array([[0, 1],
       [5, 6]])
>>> np.intersect1d(a,b)
array([0, 1, 5])
  • setxor1d(x,y):集合的對稱差,即異或
>>> a
array([[0, 1],
       [2, 3],
       [4, 5]])
>>> b
array([[0, 1],
       [5, 6]])
>>> np.setxor1d (a,b)
array([2, 3, 4, 6])
  • setdiff1d(x,y):集合的差,即元素在x中但不在y中
>>> a
array([[0, 1],
       [2, 3],
       [4, 5]])
>>> b
array([[0, 1],
       [5, 6]])
>>> np.setdiff1d(a,b)
array([2, 3, 4]
  • any:用於測試數組中是否存在一個或多個True
  • all:用於測試數組中是否所有爲True
>>> bools=np.array([True,False]) >>> bools.any() True >>> bools.all() False
  •  diag:以一維數組的形式返回方陣的對角線(或非對角線)元素,或將一維數組轉換爲方陣(非對角線元素爲0)
>>> f=np.arange(9).reshape(3,3) >>> f array([[0, 1, 2], [3, 4, 5], [6, 7, 8]]) >>> np.diag(f)   #返回方陣f的對角線元素
array([0, 4, 8]) >>> np.diag(f,1)   #返回f對角線上移1位的元素
array([1, 5]) >>> np.diag(f,-2)  #返回f對角線下移2位的元素
array([6]) >>> g=np.arange(4) >>> g array([0, 1, 2, 3]) >>> np.diag(g)         #將一維數組g轉換爲方陣
array([[0, 0, 0, 0], [0, 1, 0, 0], [0, 0, 2, 0], [0, 0, 0, 3]])
  • dot:矩陣乘法
>>> k array([[6, 4, 2], [5, 3, 1]]) >>> b array([[2, 2], [2, 3], [4, 5]]) >>> b.dot(k) array([[22, 14,  6], [27, 17,  7], [49, 31, 13]])
  • trace:計算對角線元素的和
>>> b=np.arange(9).reshape(3,3) >>> b array([[0, 1, 2], [3, 4, 5], [6, 7, 8]]) >>> b.trace () 12
  •  det:計算矩陣行列式
>>> np.linalg.det(b) 0.0

 

  • inv:計算方陣的逆
>>> c array([[1, 1, 1], [3, 4, 5], [6, 7, 8]]) >>> np.linalg.inv(c) array([[ -4.50359963e+15,  -1.50119988e+15,   1.50119988e+15], [ 9.00719925e+15,   3.00239975e+15,  -3.00239975e+15], [ -4.50359963e+15,  -1.50119988e+15,   1.50119988e+15]])
  • rand:產生均勻分佈的樣本值
>>> a=np.random.rand(6) >>> a array([ 0.84127444,  0.5384819 ,  0.90085008,  0.07750325,  0.35909086, 0.70885957])
  • randint(low,high=None,size=None,dtype) :從給定的上下限範圍隨機取整數
>>> b=np.random.randint(0,9,size=(2,3))   #隨機取值0~9的2行3列數組
>>> b array([[2, 7, 1], [1, 4, 8]]) >>> c=np.random.randint(0,9)   #沒有size,默認取一個值
>>> c 8
  • randn:產生正態分佈(平均值爲0,標準差爲1)的樣本值
>>> d=np.random.randn(6).reshape(2,3) >>> d array([[-0.01535237, -0.81693929, -0.71081245], [-0.10101115, -0.57806109,  1.48653213]])
  • permutation(x) :返回一個序列的隨機排列或返回一個隨機排列的範圍

x:int或array_like
若是 x是一個整數,隨機排列。
若是x是一個數組,隨機複製一個元素。

>>> np.random.permutation(5)   #0~5的隨機排序
array([3, 1, 0, 4, 2]) >>> np.random.permutation([1,2,3])  #數組中元素的隨機排序
array([2, 1, 3]) >>> arr=[[1,2,3],[4,5,6]] >>> np.random.permutation(arr)      #二維數組中,行的隨機排序
array([[4, 5, 6], [1, 2, 3]])
  •  seed:隨機數種子
>>> np.random.seed(5); np.random.rand(10) array([ 0.22199317,  0.87073231,  0.20671916,  0.91861091,  0.48841119, 0.61174386,  0.76590786,  0.51841799,  0.2968005 ,  0.18772123]) >>> np.random.seed(5); np.random.rand(10) array([ 0.22199317,  0.87073231,  0.20671916,  0.91861091,  0.48841119, 0.61174386,  0.76590786,  0.51841799,  0.2968005 ,  0.18772123]) #一樣的代碼,反覆輸入運行,結果相同。 
相關文章
相關標籤/搜索