• Python21day学习---numpy基础操作----day18



    活动地址:CSDN21天学习挑战赛

    一、Numpy 介绍

    Numpy (Numerical Python) 是一个开源的 Python 科学计算库,用于快速处理任意维度的数组。 Numpy 支持常见的数组和矩阵操作。

    对于同样的数值计算任务,使用 Numpy 比直接使用 Python 要简洁的多。

    Numpy 使用 ndarray 对象来处理多维数组,该对象是一个快速而灵活的大数据容器。

    二、Ndarray 介绍

    NumPy 提供了一个N维数组类型 ndarray ,它描述了相同类“items” 的集合。

    要存储八个同学的成绩

    用 ndarray 进行存储:

    1. import numpy as np
    2. score=np.array([[80, 89, 86, 67, 79] ,
    3. [78, 97, 89, 67, 81],
    4. [90, 94, 78, 67, 74] ,
    5. [91, 91, 90, 67, 69] ,
    6. [76, 87, 75, 67, 86],
    7. [70, 79, 84, 67, 84] ,
    8. [94, 92, 93, 67, 64],
    9. [86, 85, 83, 67, 80]])
    10. print(type(score),score)

    返回结果:

    1. 'numpy.ndarray'> [[80 89 86 67 79]
    2. [78 97 89 67 81]
    3. [90 94 78 67 74]
    4. [91 91 90 67 69]
    5. [76 87 75 67 86]
    6. [70 79 84 67 84]
    7. [94 92 93 67 64]
    8. [86 85 83 67 80]]

    三、Ndarray 与 Python 原生 list 运算效率对比

    在这里我们通过一段代码运行来体会到 ndarray 的好处

    1. import random
    2. import time
    3. import numpy as np
    4. a = []
    5. for i in range(100000000):
    6. a.append(random.random())
    7. %time sum1=sum(a)
    8. b=np.array(a)
    9. %time sum2=np.sum(b)

    输出结果为:

    1. CPU times: user 1.82 s, sys: 17.8 s, total: 19.6 s
    2. Wall time: 57.9 s
    3. CPU times: user 189 ms, sys: 606 ms, total: 794 ms
    4. Wall time: 2.04 s

     

    从中我们看到 ndarray 的计算速度要快很多,节约了时间(57.9s降低到了2.04s)。

    机器学习的最大特点就是大量的数据运算,那么如果没有一个快速的解决方案,那可能现在 python 也在机器学习领域达不到好的效果。

    Numpy 专门针对 ndarray 的操作和运算进行了设计,所以数组的存储效率和输入输出性能远优于 Python 中的嵌套列表,数组越大,Numpy 的优势就越明显。

    四、Ndarray 的优势

    1.储存风格

    从图中我们可以看出 ndarray 在存储数据的时候,数据与数据的地址都是连续的,这样就给使得批量操作数组元素时速度更快。

    这是因为 ndarray 中的所有元素的类型都是相同的,而 Python 列表中的元素类型是任意的,所以 ndarray 在存储元素时内存可以连续,而 python 原生 list 只能通过寻址方式找到下一个元素,这虽然也导致了在通用性能方面 Numpy 的 ndarray 不及 Python 原生list,但在科学计算中, Numpy 的 ndarray 就可以省掉很多循环语句,代码使用方面比 Python 原生 list 简单的多。

    2.并行化运算

    ndarray 支持并行化运算(向量化运算)

    3.底层语言

    Numpy 底层使用 C 语言编写,内部解除了 GIL(全局解释器锁),其对数组的操作速度不受 Python 解释器的限制,效率远高于纯 Python 代码。

    五,numpy的属性和类型

    ndarray 的属性

    数组属性反映了数组本身固有的信息。

    ndarray.shape 数组维度的元组

    ndarray.ndim 数组维数

    ndarray.size 数组中的元素数量

    ndarray.itemsize 一个数组元素的长度(字节)

    ndarray.dtype 数组元素的类型

    1. a=np.array([[1, 2, 3],[4, 5, 6]],dtype=np.float32)
    2. b=np.array([1,2,3,4])
    3. c=np.array([[[1,2,3],[4,5,6,]],[[1,2,3],[4,5,6]]])
    4. print(a.shape)
    5. print(b.shape)
    6. print(c.shape)

    结果如下:

    1. (2, 3)
    2. (4,)
    3. (2, 2, 3)

    那么,现在的a,b,c数组分别是几维数组呢?有多少个中括号就是几维的数组哦,因此,a是二维数组,b是一维数组,c是三维数组。


            数组类型以及范围
    np.bool用一个字节存储的布尔类型(True 或 False)‘b'

    np.int8  
     一个字节大小,-128至127'i'
    np.int16 整数,-32768至32767 i2'
    np.int32整数,-231至232-1  ‘i4'
    np.int64 整数,-263至263-1i8’
     
    np.uint8 无符号整数,0至255   'u'
    np.uint16无符号整数,0至65535'u2'
    np.uint32无符号整数,0至2**32-1'u4'
    np.uint64 无符号整数,0至2**64-1'u8'
    np.float16半精度浮点数:16位,正负号1位,指数5位,精度10位‘f2’
    np.float32单精度浮点数:32位,正负号1位,指数8位,精度23位 ‘f4’
    np.float64 双精度浮点数:64位,正负号1位,指数11位,精度52位 ‘f8’
    np.complex128

    复数,分别用两个64位浮点数

    表示实部和虚部

    'c16'
    np.object_ python 对象 ‘O’ 
    np.string_  字符串’S’
    np.unicode_ unicode 类型’U’

    建立一个数组,名称为d,指定类型为int16:

    1. d=np.array([1,2,3,32767],dtype=np.int16)
    2. print(d.dtype)
    3. print(d)

     也可以这样指定类型:

    1. d=np.array([1,2,3,32800],dtype="i2")
    2. print(d.dtype)
    3. print(d)

    但32800已经超过int16的范围了,因此,结果是错误的哦,结果如下:

    1. int16
    2. [ 1 2 3 -32736]

    修改i2为i8就可以正常显示啦。

  • 相关阅读:
    elasticsearch中文档操作,索引导入数据、批量导入、删除文档
    2021csp/s初赛
    【设计模式】概述
    软件报错msvcr120.dll丢失怎么办?五个有效修复方法分享
    mPEG-PLA-FITC MW:2K,1300 聚乙二醇2000-聚乳酸1300-绿色荧光素
    DBA-现在应该刚刚入门吧
    【杂记-浅谈交换机的二层转发和三层转发】
    设计模式---建造者模式
    linux安装aerospike免安装版
    NNDL 实验八 网络优化与正则化(6)网络正则化
  • 原文地址:https://blog.csdn.net/alwaysbefine/article/details/126399533