数据挖掘之Numpy详细了解

作者: 简书用户9527 | 来源:发表于2018-04-03 23:43 被阅读57次

    不是最全,但是也是很详细的练习,阅读时长可能过长,建议先收藏

    (一) 定义


    (1)官方文档:

    NumPy is the fundamental package for scientific computing with Python. It contains among other things:

    a powerful N-dimensional array object
    sophisticated (broadcasting) functions
    tools for integrating C/C++ and Fortran code
    useful linear algebra, Fourier transform, and random number capabilities


    (2)大概意思是:

    一个用python实现的科学计算包。
    1、一个强大的N维数组对象Array;
    2、比较成熟的(广播)函数库;
    3、用于整合C/C++和Fortran代码的工具包;
    4、实用的线性代数、傅里叶变换和随机数生成函数。
    5、numpy和稀疏矩阵运算包scipy配合使用更加方便

    (二)使用概览

    由于这里使用的函数比较多,故分了几个大模块进行练习,练习具体到使用每个函数

    (一)使用numpy构建矩阵

    (二)元素的获取

    (三)各种数学函数

    (四)统计函数

    (五)映射函数

    (六)离散与连续分布

    (七)数据加载与导出

    NumPy

    (三)具体使用

    (一)使用numpy构建矩阵【array函数】

    import numpy as np
    """
    创建一维数组(列表或者元组),二维数组(嵌入的列表或元组)
    """
    arr1 = np.array([1,3,5,6,7,9])
    print(arr1)
    
    arr2 = np.array((2,3,4,5,6,8,9))
    print(arr2)
    
    arr_two = np.array([[1,2,3,4,5],[2,3,4,5,6,7],[5,6,7,9]])
    print(arr_two)
    
    arr_two_2 = np.array([[2,3,4,5],[2,3,4,5],[5,6,7,9]])
    print(arr_two_2)
    

    运行结果:

    NumPy构建矩阵

    需要注意的是arr_two返回的是一个list,里面的数组个数不一致,返回的便是每个list

    (二)元素的获取【shape函数】

    (1) 返回一个数组的行数与列数

    
    """
    返回一个数组的行数和列数
    """
    arr1_shape = arr1.shape
    arr2_shape = arr2.shape
    arr_two_shape = arr_two.shape
    arr_two_shape_2 = arr_two_2.shape
    print('返回列表行数和列数********************')
    print(arr1_shape,arr2_shape,arr_two_shape,arr_two_shape_2)
    
    

    (2)使用索引的方式,获取元素

    """
    元素的获取:使用索引的方式   行列的表示[行,列]
    """
    print('元素的获取,使用索引的方式*******************')
    print(arr_two_2,'\n')
    # (1)获取二维数组的某列(这里获取第二列,列表索引下标从0开始)
    print(arr_two_2[:,2],'\n')
    # (2)获取二维数组的某行(这里获取第一行)
    print(arr_two_2[1,:],'\n')
    # (3)获取二维数组的某个元素
    print(arr_two_2[2,3],'\n')
    

    (3)获取列表矩阵

    print("返回列表矩阵****************")
    print(arr_two_2,'\n')
    
    # 获取二维数组的某几行
    print(arr_two_2[[0,2],:],'\n')
    # 获取二维数组的某几列
    print(arr_two_2[:,[0,1,3]],'\n')
    # 获取二维数组的某几行某几列元素(M3):这里得到的是一个一维数组
    print(arr_two_2[[0,2],[2,3]],'\n')
    # 获取二维数组的某几行某几列元素(M4): 这里得到的是一个2x2的矩阵
    print(arr_two_2[np.ix_([0,2],[2,3])])
    
    
    NumPy元素的获取

    (三)各种数学函数

    函数包括:绝对值,算数平方根,平方,指数,对数,符号函数,向上/下取整,返回最近的整数,幂运算

    建议收藏后在PC端看,

    print('*******************  np 的其他相关数学函数   ************************* ')
    
    # 绝对值
    abs_template = [-3,-2,-1,0,1,2,3,4]
    abs_np = np.abs(abs_template)
    fabs_np = np.fabs(abs_template)
    print(abs_template,abs_np,fabs_np)
    
    # 算术平方根
    sqrt_num = 25
    sqrt = np.sqrt(sqrt_num)
    print(sqrt)
    
    # 平方
    square_num = 4
    square = np.square(square_num)
    print(square)
    
    # 指数
    print('指数:')
    exp_num = 6
    exp = np.exp(exp_num)
    print(exp)
    
    # 对数
    log_2 = np.log2(2)
    log_10 = np.log10(10)
    log_20 = np.log(20)
    print(log_2,log_10,log_20)
    
    # 符号函数 (大于0的返回1,小于0的返回-1,0返回0值)
    sign_over = np.sign(2)
    sign_below = np.sign(-2)
    sign_zero = np.sign(0)
    print(sign_over,sign_below,sign_zero)
    
    # 向上取整
    cell_num = np.ceil(5.4)
    cell_num2 = np.ceil(-5.4)
    cell_num3 = np.ceil(-5)
    print(cell_num,cell_num2,cell_num3)
    
    # 向下取整
    floor_num1 = np.floor(5.6)
    floor_num2 = np.floor(5.4)
    floor_num3 = np.floor(-5.6)
    print(floor_num1,floor_num2,floor_num3)
    
    # 返回最近的整数
    rint_num1 = np.rint(5.6)
    rint_num2 = np.rint(5.2)
    print(rint_num1,rint_num2)
    
    # 判断是否缺失
    print('是否缺失')
    isnan_num = np.isnan((2,3,-1,1))
    print(isnan_num)
    
    # 判断是否无限:isfinite  (有限:isinf)
    isfinite_num = np.isfinite(np.math.log10(2))
    print(isfinite_num)
    isinf_num  = np.isinf(np.math.log(2,4))
    print(isinf_num)
    
    # 幂运算
    power_num = np.power(2,3)
    print(power_num)
    
    # 余数运算
    mod_num1 = np.mod(10,2)
    mod_num2 = np.mod([12,14],3)
    print(mod_num1,mod_num2)
    
    数学函数

    (四)统计函数

    余数运算,最大/小值,浮点最大/小值,求和,均值,标准差,方差,中位数

    print('统计函数:')
    
    # 最大值
    arr_1 = [23,2344,435,54,66,7,99]
    max_num = np.max(arr_1)
    print(max_num)
    
    # 浮点数最大值
    fmax_num = np.fmax([1,4,9],[0,5,10])
    print(fmax_num)
    
    # 最小值
    min_num = np.min(arr_1)
    print(min_num)
    # 浮点数的最小值(此处的比值为两个list集合一一对应进行比较,可查看numpy官方文档)
    fmin_num = np.fmin([2,3,4],[1,5,3])
    print(fmin_num)
    
    # 求和
    sum_num = np.sum([2,3,4,5])
    print(sum_num)
    
    # 均值
    mean_num = np.mean([2,2,3,3,4,4])
    print(mean_num)
    
    # 标准差:样本平均数方差的开平方
    #(两组数据平均值都相同的话,这时候标准差大的数据反而不好)
    # 标准差是方差的算术平方根
    std_num = np.std([2,2,3,3,4,4])
    std_num2 = np.std([1,2,0,6,4,5])
    print(std_num,std_num2)
    
    # 方差
    var_num = np.var([2,2,3,3,4,4])
    var_num2 = np.var([1,2,0,6,4,5])
    print(var_num,var_num2)
    
    # 中位数:为奇数个时,X(n+1)/2  偶数个时:(X(n/2) + X(n/2+1))/2
    median_num = np.median([2,2,3,3,4,4,5,5])
    median_num2 = np.median([1,2,0,6,4,5])
    print(median_num,median_num2)
    
    
    统计函数

    (五)映射函数

    #   映射函数   apply_along_axis
    print('******************  映射函数开始  *********************')
    arr3 = np.array([[1,2,3,4],[5,6,7,8],[3,4,5,6]])
    print(arr3,'\n')
    
    # 对矩阵的每一行计算均值
    mean_arrays = np.apply_along_axis(func1d=np.mean,axis=1,arr=arr3)
    print(mean_arrays,'\n')
    
    # 对矩阵的每一行进行求和计算
    sum_arrays = np.apply_along_axis(func1d=np.sum,axis=1,arr=arr3)
    print(sum_arrays,'\n')
    
    
    映射函数

    (六)离散与连续分布

    """
    随机数生成(常用的分布随机数):离散分布,连续分布
    1 离散分布:二项分布,泊松分布
    2 连续分布:正态分布(高斯分布),其他常用分布
    """
    
    # (一)二项分布  是n个独立的是/非试验中成功的次数的离散概率分布
    # 设置随机种子,保证每次运行都出现相同的随机数
    np.random.seed(123)
    # 二项分布
    r1 = np.random.binomial(n=10,p=0.2,size=20)
    print(len(r1))
    print(r1,'\n')
    
    r2 = np.random.binomial(n=10,p=0.2,size=(3,5))
    print(r2,'\n')
    
    # 泊松分布(单位时间内随机事件发生的次数)
    # 保证每次运行都会出现相同的随机数
    np.random.seed(1)
    poisson1 = np.random.poisson(lam=6,size=10)
    print(poisson1,'\n')
    poisson2 = np.random.poisson(lam=(10,50,20),size=(5,3))#lamda参数分别取10,50,20,表示单位时间内某件事发生的频次
    print(poisson2,'\n')
    
    # (二) 连续分布
    # (1)正态分布
    
    # 均值为2,标准差为3
    normal = np.random.normal(loc=2,scale=3,size=10)
    print(normal,'\n')
    
    normal2 = np.random.normal(loc=2,scale=3,size=(3,5))
    print(normal2)
    
    # 其他分布(t分布,f分布,均匀分布,这里暂时不举例)
    
    
    离散与连续分布

    (七)数据加载与导出

    # numpy模块数据加载
    print('#####################    numpy 模块数据加载    #####################')
    
    # 数据写入
    """
    name:指定外部文件的路径
    delimiter:指定文件中数据列的分隔符
    skiprows:指定读数时跳过的行数
    skip_header:指定跳过首行
    usecols:指定读取的数据列
    """
    data_txt = np.loadtxt(fname='loadtxt.txt',delimiter=',',skiprows=1)
    # 推荐第二种
    data_txt2 = np.genfromtxt(fname='loadtxt.txt',delimiter=',',skip_header=1,usecols=[0,2])
    print(data_txt,'\n')
    print(data_txt2,'\n')
    
    # 数据写出
    """
    fname:指定数据写出的路径
    X:指定需要写出的数据
    fmt:指定输出数据的格式,默认科学计算法
    delimiter:指定数据列之间的分隔符,默认空格符
    newline:指定新行的标识符,默认换行
    header:指定输出数据首行值
    footer:指定输出数据的末行值
    comments:指定注释符,默认“#”
    """
    input_data = '要写出的数据'
    np.savetxt(fname='F:data.txt',X=input_data,fmt='%.18e',delimiter=' ',newline='\n',header='',footer='',comments='#')
    
    

    这里建议先收藏,留着以后空闲时间进行练习,或者在使用NumPy的时候进行翻阅,PS:我练习这个练习了一个下午,所以文章有些长,代码里面的注释已经很详细了,就暂时不过多的写注释了。

    相关文章

      网友评论

      本文标题:数据挖掘之Numpy详细了解

      本文链接:https://www.haomeiwen.com/subject/hqlhhftx.html