前言
接着上面的,这里主要是玩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)) #非