python 科学计算学习一:numpy快速处理数据(3)

来源:互联网 发布:cydia软件源下载 编辑:程序博客网 时间:2024/06/06 06:42

1,广播:对 形状不同 的数组的运算采取的操作。但是这个输入的数组中必须有一个 某轴长度为1,或者缺 少了一个维度(这个时候会自动的在shape属性前面补上1)。例如:

>>> import numpy as np 
>>> a=np.arange(10,50,10).reshape(-1,1) 
>>> a.shape 
(4, 1) 
>>> b=np.arange(0,4) 
>>> b 
array([0, 1, 2, 3]) 
>>> b.shape 
(4,) 
>>> a+b 
array([[10, 11, 12, 13], 
       [20, 21, 22, 23], 
       [30, 31, 32, 33], 
       [40, 41, 42, 43]]) 

2,内积:np.dot(a,b) 就可以来计算a,b的内积,同样的np.inner(a,b)也可以,但是它要求最后一维度是要相同的,np.outer(a,b)则是将数组 展平为一维数组 再进行计算。

3,求和,平均值,方差:比较简单,分别是np.sum(), np.mean(), np.var(), np.std()(这个是标准差),关键是在加入axis参数以后要很好的区分;看下面的例子应该就比较清楚了:

求和:

>>> a 
array([[6, 7, 1, 6], 
       [1, 0, 2, 3], 
       [7, 8, 2, 1]]) 
>>> np.sum(a) 
44 
>>> np.sum(a,axis= 0 ) 
array([14, 15,  5, 10]) 
>>> np.sum(a,axis= 1 ) 
array([20,  6, 18]) 
>>> np.sum(a,axis= -1 ) 

均值:

>>> a 
array([[6, 7, 1, 6], 
       [1, 0, 2, 3], 
       [7, 8, 2, 1]]) 
>>> np.mean(a) 
3.6666666666666665 
>>> np.mean(a,axis=0) 
array([ 4.66666667,  5.        ,  1.66666667,  3.33333333]) 

方差:

>>> np.var(a)

7.7222222222222223 
>>> np.var(a,axis=0) 
array([  6.88888889,  12.66666667,   0.22222222,   4.22222222]) 
>>> np.std(a,axis=0) 
array([ 2.62466929,  3.55902608,  0.47140452,  2.05480467]) 

4,最值和排序:最值有np.max(),np.min() 他们都有axis和out(输出)参数, 而通过np.argmax(), np.argmin()可以得到取得最大或最小值时的 下标。排序通过np.sort(), 而np.argsort()得到的是排序后的数据原来位置的下标。

>>> a 
array([[6, 7, 1, 6], 
       [1, 0, 2, 3], 
       [7, 8, 2, 1]]) 
>>> a.sort() 
>>> a 
array([[1, 6, 6, 7], 
       [0, 1, 2, 3], 
       [1, 2, 7, 8]]) 
>>> np.sort(a,axis=0) 
array([[0, 1, 2, 3], 
       [1, 2, 6, 7], 
       [1, 6, 7, 8]]) 
>>> np.argsort(a,axis=0) 
array([[1, 1, 1, 1], 
       [0, 2, 0, 0], 
       [2, 0, 2, 2]]) 

5, 统计函数:unique()保留数组中不同的值,返回两个参数。bincount()对数组中各个元素出现的次数进行统计,还可以设定相应的 权值。

>>> b=np.random.randint(0,5,8) 
>>> b 
array([2, 3, 3, 0, 1, 4, 2, 4]) 

>>> np.unique(b) 
array([0, 1, 2, 3, 4]) 

>>> c,s=np.unique(b,return_index=True) 
>>> c 
array([0, 1, 2, 3, 4]) 
>>> s 
array([3, 4, 0, 1, 5])(元素出现的起始位置) 

>>> b 
array([2, 3, 3, 0, 1, 4, 2, 4])

>>> np.bincount(b) 
array([1, 1, 2, 2, 2])  分别是0 1 2 3 4的个数; 
>>> w=np.random.rand(8) 
>>> w 
array([ 0.29529445,  0.4554129 ,  0.69615963,  0.4766137 ,  0.97929591, 
        0.46069939,  0.76476676,  0.74556715]) 权重值; 
>>> np.bincount(b,w)。 
array([ 0.4766137 ,  0.97929591,  1.06006121,  1.15157254,  1.20626654]) 权重和; 

6,掩码数组:表示的是不完整的数据或是含有无效值的数据。

>>> import numpy.ma as ma 
>>> b 
array([2, 3, 3, 0, 1, 4, 2, 4]) 
>>> mask=b<3 
>>> mx=ma.array(b,mask=mask) 
>>> mx 
masked_array(data = [-- 3 3 -- -- 4 -- 4], 
             mask = [ True False False  True  True False  True False],fill_value = 999999) 

接下来就可以对这些数据操作了。

0 0
原创粉丝点击