• 机器学习实战--第一章 Numpy使用


    导入numpy 并简单赋值

    import numpy as np
    
    a = np.array([0, 1, 2, 3, 4, 5])
    print a
    # 数组转换到2D矩阵 变成三行两列
    b = a.reshape((3, 2))
    print b
    # .ndim(空间维度的意思)即矩阵列数
    print a.ndim
    print b.ndim
    # .shape查看矩阵形态,即几行几列
    print b.shape
    # numpy避免复制操作 直接修改值,a,b的值都变化
    b[1][0] = 77
    print b, a
    # 结果为

    # [[ 0 1]
    # [77 3]
    # [ 4 5]] [ 0 1 77 3 4 5]

    # 需要一个复本,使用.copy(),这里c和a是完全独立的副本

    c = a.reshape((3, 2)).copy()
    c[0][0] = 99
    print c

    对数组操作的传递

    a=np.array([1,2,3,4,5])
    # 对数组操作的传递
    print a*2
    print a**2
    # [  0   2  4   6   8  10]
    # [   0    1  4    9   16   25]
    
    # python list集的操作
    print [1,2,3,4,5]*2
    print [1,2,3,4,5]**2
    # [1, 2, 3, 4, 5, 1, 2, 3, 4, 5]
    # TypeError: unsupported operand type(s) for ** or pow(): 'list' and 'int'

    numpy的索引

    # 将数组本身作为数组索引使用
    # 显示数组a的第2,3,4个值
    print a[np.array([2, 3, 4])]
    # [77,3,4]
    # 判断条件传递到每一个参数
    print a>4
    # [False False  True False False  True]
    # 存储判断结果
    print a[a>4]
    # [77  5]
    # 修剪异常值,大于4的值置为4
    a[a>4] = 4
    print a
    # [0 1 4 3 4 4]

    专门的修剪函数

    # clip修剪,将超出边界的值用边界替代
    a = np.array([11,22,33,1,2,3,-1])
    print a.clip(0, 4)
    # [4 4 4 1 2 3 0]

    处理不存在的值

    对于包含的不合法的值,使用numpy.NAN做标记

    # 模拟一个数据
    c = np.array([1, 2, np.NAN, 4, 5, 6, 7])
    print c
    # [  1.   2.  nan   4.   5.   6.   7.]
    # 注意后面有个.号

    判断是否是无效值

    print np.isnan(c)
    # [False False  True False False False False]
    # 注意这个方法的调用
    # 筛选有效数据
    print c[~np.isnan(c)]
    
    # mean 求算数平均值,axis是轴 0算是x轴 1算是y轴 考虑x=1 y=2;x=3 y=4
    >>> a = np.array([[1, 2], [3, 4]])
    >>> np.mean(a)
    2.5
    >>> np.mean(a, axis=0)
    array([ 2.,  3.])
    >>> np.mean(a, axis=1)
    array([ 1.5,  3.5])

    运行时间比较

    normal_py_src = timeit.timeit('sum(x*x for x in xrange(1000))', number=10000)
    native_np_src = timeit.timeit('sum(na*na)', setup="import numpy as np; na=np.arange(10000)",
                                  number=10000)
    good_np_src = timeit.timeit('na.dot(na)', setup="import numpy as np; na=np.arange(10000)",
                                  number=10000)
    
    print("normal python:%f sec"%normal_py_src)
    print("Naive Numpy:%f sec"%native_np_src)
    print("Good py:%f sec"%good_np_src)
    
    #normal python:0.820022 sec
    #Naive Numpy:52.690701 sec
    #Good py:0.098299 sec

    python 中访问个体数组元素是相当耗时的

    -------------

  • 相关阅读:
    itextpd f生成 pdf 文件
    java word文档 转 html文件
    Activiti之 Exclusive Gateway
    activiti入门
    lucene分词器与搜索
    这款小程序 能让你和孙悟空一样 可以七十二变
    西游记中神兽谛听的能力 这款小程序也有
    想拥有一款钢铁侠Jarvis管家的软件吗?
    微信小程序开发填坑指南V1
    NaviSoft31.源码开发完成
  • 原文地址:https://www.cnblogs.com/evoler/p/5405603.html
Copyright © 2020-2023  润新知