Chinaunix首页 | 论坛 | 博客
  • 博客访问: 6941944
  • 博文数量: 701
  • 博客积分: 10821
  • 博客等级: 上将
  • 技术积分: 12021
  • 用 户 组: 普通用户
  • 注册时间: 2005-12-02 10:41
个人简介

中科院架构师,专注企业数字化各个方面,MES/ERP/CRM/OA、物联网、传感器、大数据、ML、AI、云计算openstack、Linux、SpringCloud。

文章分类

全部博文(701)

分类: Python/Ruby

2016-07-18 17:14:28

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)

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

阅读(3893) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~