博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

二、Python开发---31、numpy(6)

Posted on 2020-02-29 01:52  兰智杰  阅读(209)  评论(0编辑  收藏  举报

ndarray聚合函数

  聚合函数是对一组值(eg一个数组)进行操作,返回一个单一值作为结果的函数,当然聚合函数也可以指定对某个具体的轴进行数据聚合操作,常见的聚合操作有:平均值、最大值、最小值、方差等

import numpy as np
'''
    random模块
    rand  返回 0 - 1 随机值
    randn 返回一个样本具有标准正态分布
    randint 返回随机的整数,位于半开区间[low,hight)size = 10  (3,3)
    random_integers(low[, high, size])  返回随机的整数,位于闭区间
    random 返回随机浮点数
'''
a = np.array([[1,2,3,4],[7,8,9,10]])
print(a)                    #输出为 [[ 1  2  3  4]
                            #        [ 7  8  9 10]]
#amin返回最小值
print(np.amin(a,1))         #参数1 表示同行数据  输出为 [1 7]
print(np.amin(a,0))         #参数0 表示同列数据  输出为 [1 2 3 4]
#amax返回最大值
print(np.amax(a,1))         #输出为 [ 4 10]
print(np.amax(a,0))         #输出为 [ 7  8  9 10]
#mean平均值
print(np.mean(a))           #输出为 5.5
print(np.mean(a,0))         #求列平均值  输出为 [4. 5. 6. 7.]
print(np.mean(a,axis = 1))  #求行平均值  输出为 [2.5 8.5]
'''
    标准差:是与平均值的偏差的平方的平均值的平方根
    std = sqrt(mean((x-x.mean())**2))
    如果数组是[1,2,3,4] 则平均值是 2.5 因此偏差是[1.5,0.5,0.5,1.5],
    偏差的平方是[2.25,0.25,0.25,2.25]
    并且其平均值的平方根,即sqrt(5/4)
'''
arr2 = np.array([[1,2,3,4],[7,8,9,10]])
print(((arr2-arr2.mean())**2).sum()/arr2.size)  #平均值的偏差的平方的平均值  输出为 10.25
print(np.mean(((arr2-arr2.mean())**2)))         #平均值的偏差的平方的平均值  输出为 10.25
print(np.sqrt(((arr2-arr2.mean())**2).sum()/arr2.size)) #输出为 3.2015621187164243
print(np.sqrt(np.mean(((arr2-arr2.mean())**2))))        #输出为 3.2015621187164243
print(np.std(arr2,0))                           #同列    输出为 [3. 3. 3. 3.]
#方差是偏差的平方的平均值即mean(x-x.mean()**2)
arr3 = np.array([[1,2,3,4],[7,8,9,10]])
print(arr3-arr3.mean())                           #输出为 [[-4.5 -3.5 -2.5 -1.5]
                                                  #        [ 1.5  2.5  3.5  4.5]]
print(((arr3-arr3.mean())**2).sum()/arr3.size)    #输出为 10.25
print(np.mean((arr3-arr3.mean())**2))             #输出为 10.25
print(np.var(arr3))                               #输出为 10.25

排序函数

  NumPy中提供了各种排序相关功能, 这些排序函数实现不同的排序算法,每个排序算法的特征在于执行速度,最坏情况性能,所需的工作空间和算法的稳定性,下表显示了三种排序算法的比较:

  

 

  numpy.sort()——函数返回输入数组的排序副本

  numpy.sort(a,axis,kind,order)

    a:要排序的内容

    axis:默认为1,按行排序;为0时,则按列排序

    kind:默认为’quicksort’快速排序

    order:如果数组包含字段,则是要排序字段

import numpy as np
arr = np.array([[3,7],[9,1]])
print(arr)                                          #输出为 [[3 7]
                                                    #        [9 1]]
print(np.sort(arr))                                 #输出为 [[3 7]
                                                    #        [1 9]]
print(np.sort(arr,axis = 0))                    #按列排序   输出为 [[3 1]
                                                #                   [9 7]]
#在sort函数中排序字段
dt = np.dtype([('name',  'S10'),('age',  int)])
a = np.array([("raju",21),("anil",25),("ravi",  17), ("amar",27)], dtype = dt)
print(a)                                     #输出为 [(b'raju', 21) (b'anil', 25) (b'ravi', 17) (b'amar', 27)]
print(a['name'])                             #输出为 [b'raju' b'anil' b'ravi' b'amar']
print(np.sort(a,order = 'name'))             #输出为 [(b'amar', 27) (b'anil', 25) (b'raju', 21) (b'ravi', 17)]
print(np.sort(a,order = 'age'))              #输出为 [(b'ravi', 17) (b'raju', 21) (b'anil', 25) (b'amar', 27)]

np.where函数

  np.where函数是三元表达式x if condition else y的矢量化版本

import numpy as np
a = np.where([[True, False], [True, True]],[[1, 2], [3, 4]],[[9, 8], [7, 6]])
print(a)                            #输出为 [[1 8]
                                    #       [3 4]]
xarr = np.array([1,2,3,4,5])
yarr = np.array([6,7,8,9,10])
condition = xarr < yarr
#zip函数接受一系列可迭代对象作为参数,将对象中对应的元素打包成一个个tuple(元组),然后返回由这些tuples组成的list(列表)
#传统的三元表达式
result1 = [x if c else y for (x,y,c) in zip(xarr,yarr,condition)]
print(result1)                     #输出为 [1, 2, 3, 4, 5]
result2 = np.where(condition,xarr,yarr)
print(result2)                     #输出为 [1 2 3 4 5]

#案例:将数组中的所有异常数字替换为0,比如将NaN替换为0
'''
输出为 [[1.         2.         0.         4.        ]
       [4.         5.         6.         0.        ]
       [0.         7.         8.         9.        ]
       [0.         2.71828183 3.14159265 4.        ]]
'''
arr = np.array([
                    [1,2,np.NaN,4],
                    [4,5,6,np.NaN],
                    [np.inf,7,8,9],
                    [np.inf,np.e,np.pi,4]
                ])
#设置条件
condition = np.isnan(arr) | np.isinf(arr)
print(np.where(condition,0,arr))

np.unique函数

  np.unique函数的主要作用是将数组中的元素进行去重操作(也就是只保存不重复的数据)

import numpy as np
arr = np.array(['图书','数码','小吃','数码','男装','小吃','美食','数码','女装'])
for a in arr:
    print(a,end = ' ')          #输出为 图书 数码 小吃 数码 男装 小吃 美食 数码 女装 
print()
arr2 = np.unique(arr)
for a in arr2:
    print(a,end = ' ')          #输出为 图书 女装 小吃 数码 男装 美食