• 2.NumPy简介


    一:NumPy简介

      • 官网链接:http://www.numpy.org/

      • NumPy教程链接:https://www.yiibai.com/numpy/

      • NumPy是Python语言的一个扩充程序库。支持高级大量的多维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库

      NumPy – MatLab 的替代之一

      NumPy 通常与 SciPy(Scientific Python)和 Matplotlib(绘图库)一起使用。 这种组合广泛用于替代 MatLab,是一个流行的技术计算平台。

      但是,Python 作为 MatLab 的替代方案,现在被视为一种更加现代和完整的编程语言。

    二:NumPy基本功能  

      • 快速高效的多维数组对象ndarray

      • 用于对数组执行元素级计算以及直接对数组执行数学运算的函数

      • 用于读写硬盘上基于数组的数据集的

      • 线性代数运算、傅里叶变换,以及随机数生成

    • 傅立叶变换和用于图形操作的例程。

    • 与线性代数有关的操作。 NumPy 拥有线性代数和随机数生成的内置函数。

    三:效率对比

      • 三种数据结构:list / array / numpy.array

      • 三种方法求和:for / sum / numpy.sum

    import timeit
    common_for = """
    for d in data:
        s += d
    """
    
    common_sum = """
    sum(data)
    """
    
    common_numpy_sum = """
    numpy.sum(data)
    """
    
    def timeit_list(n, loops):
        list_setup = """
    import numpy
    data = [1] * {}
    s = 0
    """.format(n)
        print 'list:'
        print timeit.timeit(common_for, list_setup, number = loops)
        print timeit.timeit(common_sum, list_setup, number = loops)
        print timeit.timeit(common_numpy_sum, list_setup, number = loops)
    
    def timeit_array(n, loops):
        array_setup = """
    import numpy
    import array
    data = array.array('L', [1] * {})
    s = 0
    """.format(n)
        print 'array:'
        print timeit.timeit(common_for, array_setup, number = loops)
        print timeit.timeit(common_sum, array_setup, number = loops)
        print timeit.timeit(common_numpy_sum, array_setup, number = loops)
    
    def timeit_numpy(n, loops):
        numpy_setup = """
    import numpy
    data = numpy.array([1] * {})
    s = 0
    """.format(n)
        print 'numpy:'
        print timeit.timeit(common_for, numpy_setup, number = loops)
        print timeit.timeit(common_sum, numpy_setup, number = loops)
        print timeit.timeit(common_numpy_sum, numpy_setup, number = loops)
    
    if __name__ == '__main__':
        timeit_list(50000, 500)
        timeit_array(50000, 500)
        timeit_numpy(50000, 500)

    运行结果:

    list:
    0.94836021896
    0.126542218145
    1.25408217549
    array:
    2.02870422344
    1.4137293358
    5.92805967058
    numpy:
    3.81213793067
    2.90964482707
    0.0174179931709

    四:NumPy的Ndarray对象(N 维数组类型

      基本的ndarray是使用 NumPy 中的数组函数创建的,如下所示:

       

      它从任何暴露数组接口的对象,或从返回数组的任何方法创建一个ndarray。

    numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)

      上面的构造器接受以下参数:

    序号参数及描述
    1. object 任何暴露数组接口方法的对象都会返回一个数组或任何(嵌套)序列。
    2. dtype 数组的所需数据类型,可选。
    3. copy 可选,默认为true,对象是否被复制。
    4. order C(按行)、F(按列)或A(任意,默认)。
    5. subok 默认情况下,返回的数组被强制为基类数组。 如果为true,则返回子类。
    6. ndimin 指定返回数组的最小维数。

    五:代码示例:

    # -*- coding: utf-8 -*-
    
    import numpy as np
    
    print '使用普通一维数组生成NumPy一维数组'
    data = [6, 7.5, 8, 0, 1]
    arr = np.array(data)
    print arr
    print '打印元素类型'
    print arr.dtype
    print 
    
    print '使用普通二维数组生成NumPy二维数组'
    data = [[1, 2, 3, 4], [5, 6, 7, 8]]
    arr = np.array(data)
    print arr
    print '打印数组维度'
    print arr.shape
    print
    
    print '使用最小维度生成NumPy维度数组'
    data = np.array([1,  2,  3,4,5], ndmin =  2)
    print data
    print
    
    print '使用zeros/empty'
    print np.zeros(10) # 生成包含10个0的一维数组
    print np.zeros((3, 6)) # 生成3*6的二维数组
    print np.empty((2, 3, 2)) # 生成2*3*2的三维数组,所有元素未初始化。
    print
    
    print '使用arrange生成连续元素'
    print np.arange(15)  # [0, 1, 2, ..., 14]

    运行结果:

    使用普通一维数组生成NumPy一维数组
    [6.  7.5  8.  0.  1. ]
    打印元素类型
    float64
    -------------------------------------
    使用普通二维数组生成NumPy二维数组
    [[1 2 3 4]
     [5 6 7 8]]
    打印数组维度
    (2L, 4L)
    -------------------------------------
    使用最小维度生成NumPy维度数组
    [[1 2 3 4 5]]
    -------------------------------------
    使用zeros/empty
    [0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
    [[0. 0. 0. 0. 0. 0.]
     [0. 0. 0. 0. 0. 0.]
     [0. 0. 0. 0. 0. 0.]]
    [[[1.91684511e-316 1.55481945e-316]
      [0.00000000e+000 0.00000000e+000]
      [0.00000000e+000 0.00000000e+000]]
    
     [[0.00000000e+000 0.00000000e+000]
      [0.00000000e+000 0.00000000e+000]
      [0.00000000e+000 0.00000000e+000]]]
    -------------------------------------
    使用arrange生成连续元素
    [ 0  1  2  3  4  5  6  7  8  9 10 11 12 13 14]

    六:NumPy - 数据类型

    NumPy 支持比 Python 更多种类的数值类型。 下表显示了 NumPy 中定义的不同标量数据类型。

    序号数据类型及描述
    1. bool_存储为一个字节的布尔值(真或假)
    2. int_默认整数,相当于 C 的long,通常为int32或int64
    3. intc相当于 C 的int,通常为int32或int64
    4. intp用于索引的整数,相当于 C 的size_t,通常为int32或int64
    5. int8字节(-128 ~ 127)
    6. int1616 位整数(-32768 ~ 32767)
    7. int3232 位整数(-2147483648 ~ 2147483647)
    8. int6464 位整数(-9223372036854775808 ~ 9223372036854775807)
    9. uint88 位无符号整数(0 ~ 255)
    10. uint1616 位无符号整数(0 ~ 65535)
    11. uint3232 位无符号整数(0 ~ 4294967295)
    12. uint6464 位无符号整数(0 ~ 18446744073709551615)
    13. float_float64的简写
    14. float16半精度浮点:符号位,5 位指数,10 位尾数
    15. float32单精度浮点:符号位,8 位指数,23 位尾数
    16. float64双精度浮点:符号位,11 位指数,52 位尾数
    17. complex_complex128的简写
    18. complex64复数,由两个 32 位浮点表示(实部和虚部)
    19. complex128复数,由两个 64 位浮点表示(实部和虚部)

      数据类型对象 (dtype):numpy.dtype(object, align, copy)

    # -*- coding: utf-8 -*-
    
    import numpy as np
    #定义名为 student 的结构化数据类型,其中包含字符串字段name,整数字段age和浮点字段marks。 此dtype应用于ndarray对象
    student = np.dtype([('name','S20'),  ('age',  'i1'),  ('marks',  'f4')])
    print student
    a = np.array([('abc',  21,  50),('xyz',  18,  75)], dtype = student)
    print a
    print '---------------------------------'
    
    print " 文件名称可用于访问 age 列的内容 "
    dt = np.dtype([('age',np.int8)])
    print dt
    a = np.array([(10,),(20,),(30,)], dtype = dt)
    print a
    print a['age']


     


      

      

  • 相关阅读:
    蛙蛙请教:把一段c算法代码转换成c#代码。
    和病毒折腾了两天
    WawaKM预览版发布,欢迎大家测试反馈哦
    (转)深度分析如何在Hadoop中控制Map的数量
    [转载]JAVA操作符
    (转)Hive Index
    Hadoop++:Hadoop的局部性能改良
    深入了解Hive Index具体实现
    Linux echo命令
    (转)带索引的mapReduce
  • 原文地址:https://www.cnblogs.com/yaboya/p/9070353.html
Copyright © 2020-2023  润新知