numpy

導入numpy庫

import  numpy as np
numpy默認ndarray的所有元素的類型是相同的
如果傳進來的列表中包含不同的類型,則統一爲同一類型,優先級:str>float>int
python 的list類型只能是一維,而ndarray可以是多維的
test=np.array([1,2,3,4,5])
test
array([1, 2, 3, 4, 5])
多維:
test=np.array([[1,2,3],[4,5,6]])
test
array([[1, 2, 3],
       [4, 5, 6]])

2. 使用np的routines函數創建
1) 利用1) np.ones(shape, dtype=None, order='C')函數創建二維全部爲1的二維數組
np.ones([3,3])
array([[ 1.,  1.,  1.],
       [ 1.,  1.,  1.],
                 [ 1.,  1.,  1.]])

同時可設置類型爲整型
np.ones([3,3],dtype=int)
2)利用 np.zeros(shape, dtype=float, order='C')函數創建全部爲0的二維數組
np.zeros([3,3])
array([[ 0.,  0.,  0.],
       [ 0.,  0.,  0.],
       [ 0.,  0.,  0.]])
3)創建二維數組,內部值都爲均一值
 np.full(shape, fill_value, dtype=None, order='C')
np.full([3,3],3.5)
array([[ 3.5,  3.5,  3.5],
       [ 3.5,  3.5,  3.5],
       [ 3.5,  3.5,  3.5]])

4)對角線值都爲1 的二維數組
np.eye(N, M=None, k=0, dtype=float)    
array([[ 1.,  0.,  0.],
        [ 0.,  1.,  0.],
      [ 0.,  0.,  1.]])
K參數可寫0,-1,1,2,-2,3(大於3則效果與3相同)

5)等差數列取值np.linspace()開始跟結束的值均能取到,其餘的平分
 np.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)
np.linspace(0,10,11,dtype=int)
array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10])


6)利用np.arange()求等差數列
 np.arange([start, ]stop, [step, ]dtype=None)
np.arange(0,10,2)
array([0, 2, 4, 6, 8])

7)利用np.random.
 a)np.random.randint(low, high=None, size=None, dtype='l')
np.random.randint(0,10,size=(3,4,5))
array([[[0, 0, 7, 3, 9],
        [3, 4, 2, 7, 9],
        [2, 6, 4, 0, 8],
        [8, 1, 8, 3, 5]],


       [[5, 5, 0, 3, 2],
        [8, 1, 3, 1, 5],
        [5, 4, 5, 4, 5],
        [1, 6, 9, 7, 0]],


      [[5, 9, 7, 3, 6],
        [7, 6, 1, 3, 0],
        [0, 3, 6, 7, 0],
        [7, 6, 8, 3, 3]]])
b)np.random.randn(d0, d1, ..., dn)
np.random.seed(0)
np.random.randn(10)
array([ 1.62434536, -0.61175641, -0.52817175, -1.07296862,  0.86540763,
       -2.3015387 ,  1.74481176, -0.7612069 ,  0.3190391 , -0.24937038])

c)np.random.random(size=None)
np.random.random(2)
array([ 0.97861834,  0.79915856])
二、ndarray的屬性
4個必記參數: ndim:維度 shape:形狀(各維度的長度) size:總長度
dtype:元素類型

三、ndarray的基本操作
1. 切片
一維與列表完全一致 多維時同理
np.random.seed(0)
x = np.random.randint(1,10,(3,4))
x
array([[6, 1, 4, 4],
       [8, 4, 6, 3],
       [5, 8, 7, 9]])

x[:2]
array([[6, 1, 4, 4],
       [8, 4, 6, 3]])

x[:,:-1]
array([[6, 1, 4],
       [8, 4, 6],
       [5, 8, 7]])

2. 變形
使用reshape函數,注意參數是一個tuple!
x=np.arange(1,10).reshape((3,3))
x
array([[1, 2, 3],
       [4, 5, 6],
       [7, 8, 9]])

3. 級聯
1)np.concatenate() 級聯需要注意的點:
2)級聯的參數是列表:一定要加中括號
3)維度必須相同
4)形狀相符
【重點】級聯的方向默認是shape這個tuple的第一個值所代表的維度方向
可通過axis參數改變級聯的方向

z1=np.array([[1,2,3],[4,5,6]])
z1
array([[1, 2, 3],
       [4, 5, 6]])

y1=np.array([[7,8,9],[12,22,23]])
y1
array([[ 7,  8,  9],
       [12, 22, 23]])

np.concatenate([z1,y1],axis=1)  水平級聯
array([[ 1,  2,  3,  7,  8,  9],
       [ 4,  5,  6, 12, 22, 23]])

np.concatenate([z1,y1])   默認爲垂直級聯
array([[ 1,  2,  3],
       [ 4,  5,  6],
       [ 7,  8,  9],
       [12, 22, 23]])


4切分:
np.split
np.vsplit
np.hsplit

x=np.arange(1,10)
x
x1,x2,x3=np.split(x,[3,5])
display(x1,x2,x3)
array([1, 2, 3])
array([4, 5])
array([6, 7, 8, 9])


np.vsplit()  垂直切分
x=x.reshape((3,3))
np.vsplit(x,[2])
[array([[1, 2, 3],
        [4, 5, 6]]), array([[7, 8, 9]])]

np.hsplit()
np.hsplit(x,[1,2])       [1,2]表示下標爲在第1列之前切分一次,在第二列前切分一次
[array([[1],
        [4],
        [7]]), array([[2],
        [5],
        [8]]), array([[3],
        [6],
        [9]])]


5. 副本
所有賦值運算不會爲ndarray的任何元素創建副本。對賦值後的對象的操作也對原來的對象生效。
1)直接賦值   類似於淺拷貝
a=np.array([1,2,3])
b=a
display(a,b)
array([1, 2, 3])
array([1, 2, 3])


b[0]=2
display(a,b)
array([2, 2, 3])
array([2, 2, 3])

2)可使用copy()函數創建副本   類似於深拷貝
c=a.copy()
c
array([2, 2, 3])
c[0]=3
display(a,c)
array([2, 2, 3])
array([3, 2, 3])


四、ndarray的聚合操作
1. 求和np.sum
np.random.seed(0)
a=np.random.random(2)
%timeit sum(a) / %timeit np.sum(a)

2. 最大最小值:np.max/ np.min
ma=max(a)
mi=min(a)
display(ma,mi)

3. 其他聚合操作
Function Name    NaN-safe Version    Description
np.sum    np.nansum    Compute sum of elements
np.prod    np.nanprod    Compute product of elements
np.mean    np.nanmean    Compute mean of elements
np.std    np.nanstd    Compute standard deviation
np.var    np.nanvar    Compute variance
np.min    np.nanmin    Find minimum value
np.max    np.nanmax    Find maximum value
np.argmin(返回最小值的下標,axis=0,以列爲組)    np.nanargmin    Find index of minimum value
np.argmax (返回最大值的下標,axis=1,以行爲組)   np.nanargmax    Find index of maximum value
np.median    np.nanmedian    Compute median of elements
np.percentile    np.nanpercentile    Compute rank-based statistics of elements
np.any    N/A    Evaluate whether any elements are true
np.all    N/A    Evaluate whether all elements are true

五、ndarray的矩陣操作

1. 基本矩陣操作
1) 算術運算符:
加減乘除 
a=np.array([[1,2,3],[4,5,6]])
a
array([[1, 2, 3],
       [4, 5, 6]])

a+1
array([[2, 3, 4],
       [5, 6, 7]])

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

a*2
array([[ 2,  4,  6],
       [ 8, 10, 12]])

a/2
array([[ 0.5,  1. ,  1.5],
       [ 2. ,  2.5,  3. ]])


2.矩陣積

b=np.arange(6).reshape((3,2))
b
array([[0, 1],
       [2, 3],
       [4, 5]])

b=np.ones((3,2),dtype=int)
b
Out[124]:
array([[1, 1],
       [1, 1],
       [1, 1]])

np.dot(a,b)
array([[ 6,  6],
       [15, 15]])


3.廣播機制
原則:
1:爲缺失元素補1
2:假定缺失元素用已有值填充

m=np.ones((2,3),dtype=int)
n=np.arange(3)
display(m,n)
array([[1, 1, 1],
       [1, 1, 1]])
array([0, 1, 2])

m+n
array([[1, 2, 3],
       [1, 2, 3]])

六、ndarray的排序
1:快速排序

np.sort()  :不改變原有輸入值的順序
ndarray.sort()本地處理,不佔有呢村但改變原有輸入值的順序
np.random.seed(0)
a=np.random.randint(0,100,10)
a
array([44, 47, 64, 67, 67,  9, 83, 21, 36, 87])

np.sort(a)
array([ 9, 21, 36, 44, 47, 64, 67, 67, 83, 87])
a
array([44, 47, 64, 67, 67,  9, 83, 21, 36, 87])

ndarray.sort():::
a.sort()
a
array([ 9, 21, 36, 44, 47, 64, 67, 67, 83, 87])
a
array([ 9, 21, 36, 44, 47, 64, 67, 67, 83, 87])    #a的值已經發生變化,因此在數據處理過程中,儘量不對元數據做出改變,因此不建議使用這種方法

2. 部分排序

np.partition(a,k)
有的時候我們不是對全部數據感興趣,我們可能只對最小或最大的一部分感興趣。
當k爲正時,我們想要得到最小的k個數
當k爲負時,我們想要得到最大的k個數
a=np.random.randint(0,100,10)
a
array([70, 88, 88, 12, 58, 65, 39, 87, 46, 88])
np.partition(a,3)   #後面的參數爲正數時,對將最小三個數放到前面
array([12, 39, 46, 58, 65, 70, 88, 87, 88, 88])
np.partition(a,-3)   #參數爲負數時對最大的n位數進行排序
array([65, 58, 46, 12, 39, 70, 87, 88, 88, 88])

發佈了39 篇原創文章 · 獲贊 16 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章