zoukankan      html  css  js  c++  java
  • (一)初识NumPy库(数组的创建和变换)

    在学习数据分析时,NumPy作为最基础的数据分析库,我们能够熟练的掌握它是学习数据分析的必要条件。接下来就让我们学习该库吧。

    学习NumPy库的环境:                                                                                                      

    python:3.6.6

    编辑器:pycharm

    NumPy安装:在cmd命令下,直接使用pip语句,pip install NumPy即可!

    NumPy是使用Python进行科学计算的基本软件包。它主要包含一下内容:

    • 有一个强大的N维数组对象ndarray;
    • 拥有复杂的广播功能函数;
    • 整合C/C++和Fortran代码的工具;
    • 线性代数、傅里叶变换、随机数生成等功能。

    具体的内容可参考NumPy官网信息:点击官网

     Python基础数据类型中是没有数组概念,NumPy库能够很好的满足了数组缺失,数组对象的优点有:

    1. 数组对象可以去掉元素间运算的循环,使一维向量更像单个数据;
    2. 设置专门的数组对象,经过优化,可以提升这类应用的运算速度;
    3. 数组对象采用相同的数据类型,有助于节省运算和存储空间。

     一、ndarray的介绍

    1、ndarray的构成:

    ndarray有两部分构成,一是实际数据;二是描述这些数据的元数据(数据维度、数据类型等)。ndarray数组一般要求所有元素类型相同(同质),数组的下标从0开始。

    其中轴(axis):保存数组的维度;秩(rank):轴的数量

    2、ndarray对象的属性:

    .ndim:秩,即轴的数量或维度的数量;

    .shape:ndarray对象的尺度,对于矩阵,n行m列;

    .size:ndarray对象元素的个数,相当于.shape的n*m的值;

    .dtype:ndarray对象的元素类型;
    .itemsize:ndarray对象中每个元素的大小,以字节为单位。

     如下举例说明:

    求数组a的平方和数组b的立方和:

    import numpy as np
    
    def npSum():
        a = np.array([0, 1, 2, 3, 4])
        b = np.array([9, 8, 7, 6, 5])
        c = a ** 2 + b ** 3
        return c
    
    print(npSum())
    [729 513 347 225 141]

    如下是ndarray属性的练习:

    import numpy as np
    a = np.array([[0, 1, 2, 3, 4], [9, 8, 7, 6, 5]])
    print(a)
    print(a.ndim)
    print(type(a))
    print(a.shape)
    print(a.size)
    print(a.dtype)
    print(a.itemsize)
    
    [[0 1 2 3 4]
     [9 8 7 6 5]]
    2
    <class 'numpy.ndarray'>
    (2, 5)
    10
    int32
    4

     3、ndarray数组的创建方法:

    • 从python中的列表、元组等类型创建ndarray;
    • 使用NumPy中函数创建ndarray数组,如arange,ones,zeros;
    • 从字节流(raw bytes)中创建ndarray数组;
    • 从文件中读取特定的格式创建ndarray数组。

    如下举例说明:

    ①、从python中的列表、元组等类型创建ndarray数组:

     

     1 import numpy as np
     2 x = np.array([[1, 2], [9, 8], (0.1, 0.2)])
     3 print(x)
     4 print(x.shape)
     5 print(x.size)
     6 
     7 [[1.  2. ]
     8  [9.  8. ]
     9  [0.1 0.2]]
    10 (3, 2)
    11 6

     

    ②、使用NumPy中函数创建ndarray数组:

    np.arange(n)            类似range()函数,返回ndarray类型,元素从0到n-1;
    np.ones(shape) 根据shape生成一个全1数组,shape是元组类型;
    np.zeros(shape) 根据shape生成一个全0数组,shape是元组类型;
    np.full(shape, val) 根据shape生成一个数组,每个元素值都是val;
    np.eye(n) 创建一个正方的n*n单位矩阵,对角线为1,其余为0;
    类似函数
    np.ones_like(a) 根据数组a的形状生成一个全1数组
    np.zeros_like(a) 根据数组a的形状生成一个全0数组
    np.full_like(a,val) 根据数组a的形状生成一个数组,每个元素值都是val

    np.linspace() 根据起止数据等间距地填充数据,形成数组
    np.concatenate() 将两个或多个数组合并成一个新的数组
    
    
     1 import numpy as np
     2 
     3 print(np.arange(10))
     4 print(np.ones((3, 6)))
     5 print(np.zeros((3, 6), dtype=np.int32))
     6 print(np.eye(5))
     7 
     8 [0 1 2 3 4 5 6 7 8 9]
     9 [[1. 1. 1. 1. 1. 1.]
    10  [1. 1. 1. 1. 1. 1.]
    11  [1. 1. 1. 1. 1. 1.]]
    12 [[0 0 0 0 0 0]
    13  [0 0 0 0 0 0]
    14  [0 0 0 0 0 0]]
    15 [[1. 0. 0. 0. 0.]
    16  [0. 1. 0. 0. 0.]
    17  [0. 0. 1. 0. 0.]
    18  [0. 0. 0. 1. 0.]
    19  [0. 0. 0. 0. 1.]]
    
    
     1 #不限制数据类型的时候生成的是浮点数
     2 a = np.linspace(1, 10, 4)
     3 print(a)
     4 # endpoint 是指最后一个元素是否是生成的四个元素中的一个
     5 b = np.linspace(1, 10, 4, endpoint=False)
     6 print(b)
     7 c = np.concatenate((a, b))
     8 print(c)
     9 
    10 
    11 [ 1.  4.  7. 10.]
    12 [1.   3.25 5.5  7.75]
    13 [ 1.    4.    7.   10.    1.    3.25  5.5   7.75]

     4、数组的变换

    对于创建后的ndarray数组,可以对其进行维度变换和元素类型变换:

    ndarray数组的维度变换
    .reshape(shape) 不改变数组元素,返回一个shape形状的数组,原数组不变
    .resize(shape) 与.reshape()功能一致,但修改原数组
    .swapaxes(ax1, ax2) 将数组n个维度中的两个维度进行调换
    .flatten() 对数组进行降维,返回折叠后的一维数组,原数组不变

     1 a = np.ones((2, 3, 4), dtype=np.int32)
     2 print(a)
     3 print(a.reshape((3, 8)))
     4 print(a.resize((3, 8)))
     5 print(a)
     6 print(a.flatten())
     7 
     8 [[[1 1 1 1]
     9   [1 1 1 1]
    10   [1 1 1 1]]
    11 
    12  [[1 1 1 1]
    13   [1 1 1 1]
    14   [1 1 1 1]]]
    15 [[1 1 1 1 1 1 1 1]
    16  [1 1 1 1 1 1 1 1]
    17  [1 1 1 1 1 1 1 1]]
    18 None
    19 [[1 1 1 1 1 1 1 1]
    20  [1 1 1 1 1 1 1 1]
    21  [1 1 1 1 1 1 1 1]]
    22 [1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1]

    # astype()方法一定会创建新的数组(原始数组的一个拷贝),即使两个类型一致

     1 a = np.ones((2, 3, 4),  dtype=np.int)
     2 print(a)
     3 b = a.astype(np.float)
     4 print(b)
     5 
     6 [[[1 1 1 1]
     7   [1 1 1 1]
     8   [1 1 1 1]]
     9 
    10  [[1 1 1 1]
    11   [1 1 1 1]
    12   [1 1 1 1]]]
    13 [[[1. 1. 1. 1.]
    14   [1. 1. 1. 1.]
    15   [1. 1. 1. 1.]]
    16 
    17  [[1. 1. 1. 1.]
    18   [1. 1. 1. 1.]
    19   [1. 1. 1. 1.]]]

    5、ndarray数组向列表的转换

     1 import numpy as np
     2 
     3 a = np.full((2, 3, 4), 25, dtype=np.int32)
     4 print(a)
     5 print(a.tolist())
     6 
     7 [[[25 25 25 25]
     8   [25 25 25 25]
     9   [25 25 25 25]]
    10 
    11  [[25 25 25 25]
    12   [25 25 25 25]
    13   [25 25 25 25]]]
    14 [[[25, 25, 25, 25], [25, 25, 25, 25], [25, 25, 25, 25]], [[25, 25, 25, 25], [25, 25, 25, 25], [25, 25, 25, 25]]]
                  
    申明:本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    Redmine-java-api使用
    Junit4 基于 custom Rule retry
    Extentreports在安卓中的应用
    uiautomator 2.0 自定义testrunner使用
    uiautomator 启动原理
    uiautomator 自定义注解的应用
    uiautomator 原理 (UiAutomation、UiAutomatorBridge、QueryController)
    uiautomator 自定义testrunner使用和启动原理
    HeadFirstPython-文件与异常
    HeadFirstPython-初识python
  • 原文地址:https://www.cnblogs.com/lsyb-python/p/11881731.html
Copyright © 2011-2022 走看看