1. 程式人生 > >numpy基礎學習大集合(三)

numpy基礎學習大集合(三)

前言

接著上面的,這裡主要是玩numpy.array中的元素。

聚合操作

這主要是用函式進行陣列間元素的計算,比如求max呀,求min之類。

import numpy as np
L=np.random.random(100) #100個 0-1之間
L

array([ 0.03898595,  0.3022195 ,  0.7882287 ,  0.76270256,  0.37256162,
        0.39511735,  0.06929385,  0.58518851,  0.73173138,  0.46849322,
        0.52439551,  0.12118606,  0.82896377
, 0.72540335, 0.85171739, 0.27477182, 0.67353418, 0.44193661, 0.14705037, 0.07662686, 0.64750648, 0.93720852, 0.11261234, 0.57297072, 0.28241708, 0.83518111, 0.29730349, 0.0254295 , 0.89393744, 0.36754938, 0.56347715, 0.65183632, 0.00331203, 0.01662427, 0.7299621 , 0.81611081, 0.14838915
, 0.64192997, 0.79817554, 0.37857768, 0.39079461, 0.32402955, 0.69512968, 0.62727529, 0.61746881, 0.40378461, 0.5288141 , 0.2575036 , 0.02095473, 0.73138818, 0.1088009 , 0.83313609, 0.78457389, 0.2530539 , 0.73763647, 0.18757797, 0.32981681, 0.04290723, 0.14284224, 0.43178795, 0.09792901
, 0.99907175, 0.7099529 , 0.90382277, 0.02921986, 0.85885769, 0.44577064, 0.80008747, 0.51710669, 0.88316762, 0.47233543, 0.14020518, 0.33564229, 0.64109165, 0.62168876, 0.21428879, 0.03572946, 0.43812806, 0.06935436, 0.19317116, 0.94904087, 0.09122501, 0.55336869, 0.54478998, 0.2039488 , 0.62114147, 0.84921263, 0.49206329, 0.6894036 , 0.66828819, 0.12382998, 0.56728057, 0.6121644 , 0.9188154 , 0.00149775, 0.97592871, 0.23632949, 0.85559082, 0.73782726, 0.37510241])

這裡可以用各種numpy的聚合函式

np.sum(L)

這裡用

sum(L)

的效果是一樣的,但是兩者速度相差大概是4倍。
還有

np.min(L)
np.max(L)
np.prod(L) #連乘 因為python天然支援大數,所以不用擔心爆掉,但是也別太狂。
np.mean(L) #求均值
np.median(L) #中位數
np.percentile(L,q=50) #百分位點 就是百分之50小於這個數,其實就是中位數
np.percentile(L,q=100) #其實就是求最大值
np.var(L) #方差
np.std(L #標準差

值得一提的是,上面所有函式也是 numpy.array的類函式,也就意味著。使用例項可以直接呼叫函式比如說

L.max()
L.min()
...

到底怎麼用看習慣。

索引

其實有時候求出最大值,最小值沒有什麼用,我們更想知道他的索引是什麼。

np.argmin(L)
np.argmax(L)

排序

如果是其他語言或者演算法 排序要花很大的篇幅說。python不用

np.sort(L)
np.argsort(L)

還有一個神奇的
學過快速排序知道有一個“基準”的概念,numpy.array可以指定一個基準 只進行一趟排序。

np.partition(L,8)
np.argpartition(L,8)

充當索引

numpy.array不光可以求索引,還可以作為另外一個numpy.array的索引。

import numpy as np
x=np.arange(16)
x
array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15])

ind=[3,5,8]
x[ind]
array([3, 5, 8])

甚至可以直接改變原陣列的形狀

x
array([ 3,  7,  4, 15,  0, 13,  6,  1, 10, 14,  9, 11,  2,  8, 12,  5])

ind=np.array([[0,2],[1,3]])
x[ind]

array([[ 3,  4],
       [ 7, 15]])

ind本身就是一個2維陣列,x是一個一維的向量。x[ind]直接把相對應位置上的元素取出來,組成了一個新的陣列形狀跟ind長的一樣。

numpy.array的關係運算

關係運算是個基礎的運算,也是常用的運算。numpy.array提供類似C語言的運算子進行矩陣的與數字的比較。

x
array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15])

x<3
array([ True,  True,  True, False, False, False, False, False, False,
       False, False, False, False, False, False, False], dtype=bool)

x>3
x==3

並且可以直接進行條件刪選。
常用的

np.sum(x<=3) #滿足條件的求和
np.count_nonzero(x<3) #滿足條件記錄不是0的個數
np.any(x<0) #any是否有一個,有一個就滿足。
np.all(x>=0) #all所有的元素都要滿足。
np.sum((x>3) & (x>10)) #並且
np.sum((x%2==0) | (x>10)) #或者,因為左右兩邊都是陣列(bool型別的),所以這裡用位運算。
np.sum(~(x==0))  #非