numpy基礎學習大集合(三)
阿新 • • 發佈:2018-12-23
前言
接著上面的,這裡主要是玩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)) #非