• NumPy 学习(1): ndarrays


      Numpy 是Numerical Python的简写,用来进行高性能的科学计算以及数据分析的基础包。它是一些高级工具(pandas)的基础。它主要提供以下几个功能:

      (1). ndarray:计算快,空间效率高的多纬的数组

      (2). 快速操作数组的标准数学函数

      (3). 向磁盘读写数据的工具,提供内存影射文件功能

      (3). 线性代数,随机数生成器,傅立叶变换功能

      (4). 整合用C,C++,以及Fortran写的代码的工具 (Python生态系统宗重要的功能)

       事实上Numpy本身没有提供太多数据分析的函数,但是理解NumPy的数组,以及面向数组的计算对后期学习pandas等工具有很大的帮助。

    1. ndarray , 多维数组对象

      多维数组对象是NumPy的一个重要特点,它为庞大的数据集提供一个运算快且灵活的容器。

      (1). 简单创建一个数组,通过调用pandas.array(),前提是需要引入numpy包,这里我门为了方便调用,将其重命名为np

    In [6]: import numpy as np
    
    In [7]: a = [6,7.5,8,0,1]
    # 用创建的list对象来创建array对象
    In [8]: arr1 = np.array(a)
    
    In [9]: arr1
    Out[9]: array([ 6. ,  7.5,  8. ,  0. ,  1. ])

      (2). 用嵌套序列来创建数组

    n [12]: data2 = [[1, 2, 3, 4], [5, 6, 7, 8]]
    
    In [13]: arr2 = np.array(data2)
    
    In [14]: arr2
    Out[14]: 
    array([[1, 2, 3, 4],
           [5, 6, 7, 8]])

      (3). 除了用np.array 来创建数组外,还有一些其他的函数来创建新的数组。

        zeros 和 ones 函数可以分别用来创建0,和1 元素的数组。 

    In [15]: np.zeros(10)
    Out[15]: array([ 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.])
    In [16]: np.ones((3,5))
    Out[16]:
    array([[ 1.,  1.,  1.,  1.,  1.],
           [ 1.,  1.,  1.,  1.,  1.],
           [ 1.,  1.,  1.,  1.,  1.]])

         通过np.empty 创建一个由任意数初始化的数组

    In [21]: np.empty((2,3,2))
    Out[21]: 
    array([[[  6.91210571e-310,   1.97791711e-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函数创建:

        

    In [28]: np.arange(10)
    Out[28]: array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

      (4). 查看数组属性

    # 查看数组维度
    In [24]: arr2.ndim Out[24]: 2 # 查看数组大尺寸 In [25]: arr2.shape Out[25]: (2, 4) # 查看数组元素类型 In [26]: arr2.dtype Out[26]: dtype('int64')
    。。。。。

    2. ndarrays 的数据类型:

       在创建数组的时候可以指定数据元素的类型,用dtype指定类型,说明在解析数组所在内存空间的时候采用什么方式。这使得NumPy 更加强大和易用。

     在大多数情况下,NumPy是直接类型映射成底层的二进制,这使得其更容易以二进制流的方式去读写数据。

        

    In [3]: arr1 = np.array([1,2,3,4],dtype = np.float64)
    
    In [4]: arr2 = np.array([4,3,2,1],dtype = np.int32)
    
    In [5]: arr1.dtype
    Out[5]: dtype('float64')
    
    In [6]: arr2.dtype
    Out[6]: dtype('int32')

      数据类型表:

      

      

      可以显示的将一种类型强转为另一种类型,这时需要使用astye函数

    In [7]: arr2.dtype
    Out[7]: dtype('int32')
    In [8]: float_arr2 = arr2.astype(np.float64)
    In [9]: float_arr2
    Out[9]: array([ 4.,  3.,  2.,  1.])
    In [10]: float_arr2.dtype
    Out[10]: dtype('float64')

      但是当把浮点类型转化为整形的时候会出现截断:

      

    In [11]: arr = np.array([3.7, -1.2, -2.6, 0.5, 12.9, 10.1])
    
    In [12]: arr.astype(np.int32)
    Out[12]: array([ 3, -1, -2,  0, 12, 10], dtype=int32)

      也可以把字符串表示的数字转换为数值类型,但是可能在转换过程中出错,因为有的字符串无法转换为数值类型。

    In [13]: numeric_strings = np.array(['1.25', '-9.6', '42'], dtype=np.string_)
    
    In [14]: numeric_strings.astype(float)
    Out[14]: array([  1.25,  -9.6 ,  42.  ])


    3. 运算

      可以在NumPy的数组之间,以及数组和数字之间作运算。

    In [15]: arr = np.array([[1., 2., 3.], [4., 5., 6.]])
    
    In [16]: arr
    Out[16]: 
    array([[ 1.,  2.,  3.],
           [ 4.,  5.,  6.]])
    # 数组间乘法
    In [17]: arr * arr
    Out[17]: 
    array([[  1.,   4.,   9.],
           [ 16.,  25.,  36.]])
    # 数组间减法
    In [18]: arr - arr
    Out[18]: 
    array([[ 0.,  0.,  0.],
           [ 0.,  0.,  0.]])
    # 数和数组的除法
    In [19]: 1 / arr
    Out[19]: 
    array([[ 1.        ,  0.5       ,  0.33333333],
           [ 0.25      ,  0.2       ,  0.16666667]])
    # 数和数组的乘法
    In [20]: arr * 0.5
    Out[20]: 
    array([[ 0.5,  1. ,  1.5],
           [ 2. ,  2.5,  3. ]])

      不同尺寸大小的数组间也是可以运算的。

      

  • 相关阅读:
    学生分数排序
    union 的一个简单例子,搜狗笔试题
    枚举的初始化赋值
    unsigned 赋值负数输出情况 & printf输出格式
    sizeof中的表达式不执行
    三级指针:百度试题
    生成器案例,#采集日志
    简述装饰器
    装饰器(转载)
    python写监控并发警报邮件
  • 原文地址:https://www.cnblogs.com/linux-wangkun/p/5894290.html
Copyright © 2020-2023  润新知