百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术资源 > 正文

【Python核武器】:Numpy深度攻略!(一)

off999 2024-12-14 14:26 30 浏览 0 评论

NumPy - 简介

NumPy 是一个 Python 包。 它代表 “Numeric Python”。 它是一个由多维数组对象和用于处理数组的例程集合组成的库。

Numeric,即 NumPy 的前身,是由 Jim Hugunin 开发的。 也开发了另一个包 Numarray ,它拥有一些额外的功能。 2005年,Travis Oliphant 通过将 Numarray 的功能集成到 Numeric 包中来创建 NumPy 包。 这个开源项目有很多贡献者。

NumPy 操作

使用NumPy,开发人员可以执行以下操作:

  • 数组的算数和逻辑运算。
  • 傅立叶变换和用于图形操作的例程。
  • 与线性代数有关的操作。 NumPy 拥有线性代数和随机数生成的内置函数。

NumPy – MatLab 的替代之一

NumPy 通常与 SciPy(Scientific Python)和 Matplotlib(绘图库)一起使用。 这种组合广泛用于替代 MatLab,是一个流行的技术计算平台。 但是,Python 作为 MatLab 的替代方案,现在被视为一种更加现代和完整的编程语言。

NumPy 是开源的,这是它的一个额外的优势。

NumPy - Ndarray 对象

NumPy 中定义的最重要的对象是称为 ndarray 的 N 维数组类型。 它描述相同类型的元素集合。 可以使用基于零的索引访问集合中的项目。

ndarray中的每个元素在内存中使用相同大小的块。 ndarray中的每个元素是数据类型对象的对象(称为 dtype)。

从ndarray对象提取的任何元素(通过切片)由一个数组标量类型的 Python 对象表示。 下图显示了ndarray,数据类型对象(dtype)和数组标量类型之间的关系。

Ndarray

ndarray类的实例可以通过本教程后面描述的不同的数组创建例程来构造。 基本的ndarray是使用 NumPy 中的数组函数创建的,如下所示:

 
numpy.array 
 

它从任何暴露数组接口的对象,或从返回数组的任何方法创建一个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.

    ndmin 指定返回数组的最小维数。

    看看下面的例子来更好地理解。

    示例 1

     
    import numpy as np 
    a = np.array([1,2,3])  
    print a

    输出如下:

    [1, 2, 3]
    

    示例 2

     
    # 多于一个维度  
    import numpy as np 
    a = np.array([[1,  2],  [3,  4]])  
    print a

    输出如下

    [[1, 2] 
     [3, 4]]
     

    示例 3

     
    # 最小维度  
    import numpy as np 
    a = np.array([1,  2,  3,4,5], ndmin =  2)  
    print a

    输出如下:

    [[1, 2, 3, 4, 5]]
     

    示例 4

     
    # dtype 参数  
    import numpy as np 
    a = np.array([1,  2,  3], dtype = complex)  
    print a

    输出如下:

    [ 1.+0.j,  2.+0.j,  3.+0.j]
     

    **ndarray ** 对象由计算机内存中的一维连续区域组成,带有将每个元素映射到内存块中某个位置的索引方案。 内存块以按行(C 风格)或按列(FORTRAN 或 MatLab 风格)的方式保存元素。


    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.

    int16 16 位整数(-32768 ~ 32767)

    7.

    int32 32 位整数(-2147483648 ~ 2147483647)

    8.

    int64 64 位整数(-9223372036854775808 ~ 9223372036854775807)

    9.

    uint8 8 位无符号整数(0 ~ 255)

    10.

    uint16 16 位无符号整数(0 ~ 65535)

    11.

    uint32 32 位无符号整数(0 ~ 4294967295)

    12.

    uint64 64 位无符号整数(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 位浮点表示(实部和虚部)

    NumPy 数字类型是dtype(数据类型)对象的实例,每个对象具有唯一的特征。 这些类型可以是np.bool_,np.float32等。

    数据类型对象 (dtype)

    数据类型对象描述了对应于数组的固定内存块的解释,取决于以下方面:

    • 数据类型(整数、浮点或者 Python 对象)
    • 数据大小
    • 字节序(小端或大端)
    • 在结构化类型的情况下,字段的名称,每个字段的数据类型,和每个字段占用的内存块部分。
    • 如果数据类型是子序列,它的形状和数据类型。

    字节顺序取决于数据类型的前缀<或>。 <意味着编码是小端(最小有效字节存储在最小地址中)。 >意味着编码是大端(最大有效字节存储在最小地址中)。

    dtype可由以下语法构造:

    numpy.dtype(object, align, copy)
     

    参数为:

    • Object:被转换为数据类型的对象。
    • Align:如果为true,则向字段添加间隔,使其类似 C 的结构体。
    • Copy ? 生成dtype对象的新副本,如果为flase,结果是内建数据类型对象的引用。

    示例 1

     
    # 使用数组标量类型  
    import numpy as np 
    dt = np.dtype(np.int32)  
    print dt

    输出如下:

    int32
    

    示例 2

     
    #int8,int16,int32,int64 可替换为等价的字符串 'i1','i2','i4',以及其他。  
    import numpy as np 
     
    dt = np.dtype('i4')  
    print dt 

    输出如下:

    int32
     

    示例 3

     
    # 使用端记号  
    import numpy as np 
    dt = np.dtype('>i4')  
    print dt

    输出如下:

    >i4
     

    下面的例子展示了结构化数据类型的使用。 这里声明了字段名称和相应的标量数据类型。

    示例 4

     
    # 首先创建结构化数据类型。  
    import numpy as np 
    dt = np.dtype([('age',np.int8)])  
    print dt 

    输出如下:

    [('age', 'i1')] 
     

    示例 5

     
    # 现在将其应用于 ndarray 对象  
    import numpy as np 
     
    dt = np.dtype([('age',np.int8)]) 
    a = np.array([(10,),(20,),(30,)], dtype = dt)  
    print a

    输出如下:

    [(10,) (20,) (30,)]
     

    示例 6

     
    # 文件名称可用于访问 age 列的内容  
    import numpy as np 
     
    dt = np.dtype([('age',np.int8)]) 
    a = np.array([(10,),(20,),(30,)], dtype = dt)  
    print a['age']

    输出如下:

    [10 20 30]
     

    示例 7

    以下示例定义名为 student 的结构化数据类型,其中包含字符串字段name,整数字段age和浮点字段marks。 此dtype应用于ndarray对象。

     
    import numpy as np 
    student = np.dtype([('name','S20'),  ('age',  'i1'),  ('marks',  'f4')])  
    print student

    输出如下:

    [('name', 'S20'), ('age', 'i1'), ('marks', '<f4')])
     

    示例 8

     
    import numpy as np 
     
    student = np.dtype([('name','S20'),  ('age',  'i1'),  ('marks',  'f4')]) 
    a = np.array([('abc',  21,  50),('xyz',  18,  75)], dtype = student)  
    print a

    输出如下:

    [('abc', 21, 50.0), ('xyz', 18, 75.0)]
     

    每个内建类型都有一个唯一定义它的字符代码:

    • 'b':布尔值
    • 'i':符号整数
    • 'u':无符号整数
    • 'f':浮点
    • 'c':复数浮点
    • 'm':时间间隔
    • 'M':日期时间
    • 'O':Python 对象
    • 'S', 'a':字节串
    • 'U':Unicode
    • 'V':原始数据(void)

    NumPy - 数组属性

    这一章中,我们会讨论 NumPy 的多种数组属性。

    ndarray.shape

    这一数组属性返回一个包含数组维度的元组,它也可以用于调整数组大小。

    示例 1

     
    import numpy as np 
    a = np.array([[1,2,3],[4,5,6]])  
    print a.shape

    输出如下:

    (2, 3)
    

    示例 2

     
    # 这会调整数组大小  
    import numpy as np 
     
    a = np.array([[1,2,3],[4,5,6]]) a.shape =  (3,2)  
    print a 

    输出如下:

    [[1, 2] 
     [3, 4] 
     [5, 6]]
     

    示例3

    NumPy 也提供了reshape函数来调整数组大小。

     
    import numpy as np 
    a = np.array([[1,2,3],[4,5,6]]) 
    b = a.reshape(3,2)  
    print b

    输出如下:

    [[1, 2] 
     [3, 4] 
     [5, 6]]
     

    ndarray.ndim

    这一数组属性返回数组的维数。

    示例 1

     
    # 等间隔数字的数组  
    import numpy as np 
    a = np.arange(24)  print a

    输出如下:

    [0 1  2  3  4  5  6  7  8  9  10  11  12  13  14  15  16 17 18 19 20 21 22 23] 
    

    示例2

     
    # 一维数组  
    import numpy as np 
    a = np.arange(24) a.ndim 
    # 现在调整其大小
    b = a.reshape(2,4,3)  
    print b 
    # b 现在拥有三个维度

    输出如下:

    [[[ 0,  1,  2] 
      [ 3,  4,  5] 
      [ 6,  7,  8] 
      [ 9, 10, 11]]  
      [[12, 13, 14] 
       [15, 16, 17]
       [18, 19, 20] 
       [21, 22, 23]]] 
     

    numpy.itemsize

    这一数组属性返回数组中每个元素的字节单位长度。

    示例 1

     
    # 数组的 dtype 为 int8(一个字节)  
    import numpy as np 
    x = np.array([1,2,3,4,5], dtype = np.int8)  
    print x.itemsize

    输出如下:

    示例 2

     
    # 数组的 dtype 现在为 float32(四个字节)  
    import numpy as np 
    x = np.array([1,2,3,4,5], dtype = np.float32)  
    print x.itemsize


    输出如下:

    4
    

    numpy.flags

    ndarray对象拥有以下属性。这个函数返回了它们的当前值。


    序号

    属性及描述

    1.

    C_CONTIGUOUS (C) 数组位于单一的、C 风格的连续区段内

    2.

    F_CONTIGUOUS (F) 数组位于单一的、Fortran 风格的连续区段内

    3.

    OWNDATA (O) 数组的内存从其它对象处借用

    4.

    WRITEABLE (W) 数据区域可写入。 将它设置为flase会锁定数据,使其只读

    5.

    ALIGNED (A) 数据和任何元素会为硬件适当对齐

    6.

    UPDATEIFCOPY (U) 这个数组是另一数组的副本。当这个数组释放时,源数组会由这个数组中的元素更新


    示例

    下面的例子展示当前的标志。

     
    import numpy as np 
    x = np.array([1,2,3,4,5])  
    print x.flags

    输出如下:

     
    C_CONTIGUOUS : True 
    F_CONTIGUOUS : True 
    OWNDATA : True 
    WRITEABLE : True 
    ALIGNED : True 
    UPDATEIFCOPY : False
     

    NumPy - 数组创建例程

    新的ndarray对象可以通过任何下列数组创建例程或使用低级ndarray构造函数构造。

    numpy.empty

    它创建指定形状和dtype的未初始化数组。 它使用以下构造函数:

    numpy.empty(shape, dtype = float, order = 'C')
     

    构造器接受下列参数:

    序号

    参数及描述

    1.

    Shape 空数组的形状,整数或整数元组

    2.

    Dtype 所需的输出数组类型,可选

    3.

    Order 'C'为按行的 C 风格数组,'F'为按列的 Fortran 风格数组

    示例

    下面的代码展示空数组的例子:

     
    import numpy as np 
    x = np.empty([3,2], dtype =  int)  
    print x

    输出如下:

    [[22649312    1701344351] 
     [1818321759  1885959276] 
     [16779776    156368896]]
     

    注意:数组元素为随机值,因为它们未初始化。

    numpy.zeros

    返回特定大小,以 0 填充的新数组。

    numpy.zeros(shape, dtype = float, order = 'C')
    

    构造器接受下列参数:

    序号

    参数及描述

    1.

    Shape 空数组的形状,整数或整数元组

    2.

    Dtype 所需的输出数组类型,可选

    3.

    Order 'C'为按行的 C 风格数组,'F'为按列的 Fortran 风格数组


    示例 1

     
    # 含有 5 个 0 的数组,默认类型为 float  
    import numpy as np 
    x = np.zeros(5)  
    print x

    输出如下:

    [ 0.  0.  0.  0.  0.]
     

    示例2

     
    import numpy as np 
    x = np.zeros((5,), dtype = np.int)  
    print x

    输出如下:

    [0  0  0  0  0]
     

    示例3

     
    # 自定义类型 
    import numpy as np 
    x = np.zeros((2,2), dtype =  [('x',  'i4'),  ('y',  'i4')])  
    print x

    输出如下:

    [[(0,0)(0,0)]
     [(0,0)(0,0)]]         
     

    numpy.ones

    返回特定大小,以 1 填充的新数组。

     numpy.ones(shape, dtype = None, order = 'C')

    构造器接受下列参数:

    序号

    参数及描述

    1.

    Shape 空数组的形状,整数或整数元组

    2.

    Dtype 所需的输出数组类型,可选

    3.

    Order 'C'为按行的 C 风格数组,'F'为按列的 Fortran 风格数组

    示例 1

     
    # 含有 5 个 1 的数组,默认类型为 float  
    import numpy as np 
    x = np.ones(5)  print x

    输出如下:

    [ 1.  1.  1.  1.  1.]
     

    示例2

     
    import numpy as np 
    x = np.ones([2,2], dtype =  int)  
    print x

    输出如下:

    [[1  1] 
     [1  1]]
     

    NumPy - 来自现有数据的数组

    这一章中,我们会讨论如何从现有数据创建数组。

    numpy.asarray

    此函数类似于numpy.array,除了它有较少的参数。 这个例程对于将 Python 序列转换为ndarray非常有用。

     
    numpy.asarray(a, dtype = None, order = None)
     

    构造器接受下列参数:

    序号

    参数及描述

    1.

    a 任意形式的输入参数,比如列表、列表的元组、元组、元组的元组、元组的列表

    2.

    dtype 通常,输入数据的类型会应用到返回的ndarray

    3.

    order 'C'为按行的 C 风格数组,'F'为按列的 Fortran 风格数组

    下面的例子展示了如何使用asarray函数:

    示例 1

     
    # 将列表转换为 ndarray 
    import numpy as np 
     
    x =  [1,2,3] 
    a = np.asarray(x)  
    print a

    输出如下:

    [1  2  3] 
     

    示例2

     
    # 设置了 dtype  
    import numpy as np 
     
    x =  [1,2,3] 
    a = np.asarray(x, dtype =  float)  
    print a

    输出如下:

    [ 1.  2.  3.] 
     

    示例3

     
    # 来自元组的 ndarray  
    import numpy as np 
     
    x =  (1,2,3) 
    a = np.asarray(x)  
    print a

    输出如下:

    [1  2  3]
     

    示例4

     
    # 来自元组列表的 ndarray
    import numpy as np 
     
    x =  [(1,2,3),(4,5)] 
    a = np.asarray(x)  
    print a

    输出如下:

    [(1, 2, 3) (4, 5)]
     

    numpy.frombuffer

    此函数将缓冲区解释为一维数组。 暴露缓冲区接口的任何对象都用作参数来返回ndarray。

    numpy.frombuffer(buffer, dtype = float, count = -1, offset = 0)
     

    构造器接受下列参数:

    序号

    参数及描述

    1.

    buffer 任何暴露缓冲区借口的对象

    2.

    dtype 返回数组的数据类型,默认为float

    3.

    count 需要读取的数据数量,默认为-1,读取所有数据

    4.

    offset 需要读取的起始位置,默认为0

    示例

    下面的例子展示了frombuffer函数的用法。

     
    import numpy as np 
    s =  'Hello World' 
    a = np.frombuffer(s, dtype =  'S1')  
    print a

    输出如下:

    ['H'  'e'  'l'  'l'  'o'  ' '  'W'  'o'  'r'  'l'  'd']
     

    numpy.fromiter

    此函数从任何可迭代对象构建一个ndarray对象,返回一个新的一维数组。

    numpy.fromiter(iterable, dtype, count = -1)
    

    构造器接受下列参数:


    序号

    参数及描述

    1.

    iterable 任何可迭代对象

    2.

    dtype 返回数组的数据类型

    3.

    count 需要读取的数据数量,默认为-1,读取所有数据


    以下示例展示了如何使用内置的range()函数返回列表对象。 此列表的迭代器用于形成ndarray对象。

    示例 1

     
    # 使用 range 函数创建列表对象  
    import numpy as np 
    list = range(5)  
    print list

    输出如下:

    [0,  1,  2,  3,  4]
     

    示例2

     
    # 从列表中获得迭代器  
    import numpy as np 
    list = range(5) 
    it = iter(list)  
    # 使用迭代器创建 ndarray 
    x = np.fromiter(it, dtype =  float)  
    print x

    输出如下:

    [0.   1.   2.   3.   4.]
     

    #IT##程序员##经验分享##numpy##编程##Python#

    相关推荐

    安全教育登录入口平台(安全教育登录入口平台官网)

    122交通安全教育怎么登录:122交通网的注册方法是首先登录网址http://www.122.cn/,接着打开网页后,点击右上角的“个人登录”;其次进入邮箱注册,然后进入到注册页面,输入相关信息即可完...

    大鱼吃小鱼经典版(大鱼吃小鱼经典版(经典版)官方版)

    大鱼吃小鱼小鱼吃虾是于谦跟郭麒麟的《我的棒儿呢?》郭德纲说于思洋郭麒麟作诗的相声,最后郭麒麟做了一首,师傅躺在师母身上大鱼吃小鱼小鱼吃虾虾吃水水落石出师傅压师娘师娘压床床压地地动山摇。...

    谷歌地球下载高清卫星地图(谷歌地球地图下载器)
    • 谷歌地球下载高清卫星地图(谷歌地球地图下载器)
    • 谷歌地球下载高清卫星地图(谷歌地球地图下载器)
    • 谷歌地球下载高清卫星地图(谷歌地球地图下载器)
    • 谷歌地球下载高清卫星地图(谷歌地球地图下载器)
    哪个软件可以免费pdf转ppt(免费的pdf转ppt软件哪个好)
    哪个软件可以免费pdf转ppt(免费的pdf转ppt软件哪个好)

    要想将ppt免费转换为pdf的话,我们建议大家可以下一个那个wps,如果你是会员的话,可以注册为会员,这样的话,在wps里面的话,就可以免费将ppt呢转换为pdfpdf之后呢,我们就可以直接使用,不需要去直接不需要去另外保存,为什么格式转...

    2026-02-04 09:03 off999

    电信宽带测速官网入口(电信宽带测速官网入口app)

    这个网站看看http://www.swok.cn/pcindex.jsp1.登录中国电信网上营业厅,宽带光纤,贴心服务,宽带测速2.下载第三方软件,如360等。进行在线测速进行宽带测速时,尽...

    植物大战僵尸95版手机下载(植物大战僵尸95 版下载)

    1可以在应用商店或者游戏平台上下载植物大战僵尸95版手机游戏。2下载教程:打开应用商店或者游戏平台,搜索“植物大战僵尸95版”,找到游戏后点击下载按钮,等待下载完成即可安装并开始游戏。3注意:确...

    免费下载ppt成品的网站(ppt成品免费下载的网站有哪些)

    1、Chuangkit(chuangkit.com)直达地址:chuangkit.com2、Woodo幻灯片(woodo.cn)直达链接:woodo.cn3、OfficePlus(officeplu...

    2025世界杯赛程表(2025世界杯在哪个国家)

    2022年卡塔尔世界杯赛程公布,全部比赛在卡塔尔境内8座球场举行,2022年,决赛阶段球队全部确定。揭幕战于当地时间11月20日19时进行,由东道主卡塔尔对阵厄瓜多尔,决赛于当地时间12月18日...

    下载搜狐视频电视剧(搜狐电视剧下载安装)

    搜狐视频APP下载好的视频想要导出到手机相册里方法如下1、打开手机搜狐视频软件,进入搜狐视频后我们点击右上角的“查找”,找到自已喜欢的视频。2、在“浏览器页面搜索”窗口中,输入要下载的视频的名称,然后...

    pubg免费下载入口(pubg下载入口官方正版)
    • pubg免费下载入口(pubg下载入口官方正版)
    • pubg免费下载入口(pubg下载入口官方正版)
    • pubg免费下载入口(pubg下载入口官方正版)
    • pubg免费下载入口(pubg下载入口官方正版)
    永久免费听歌网站(丫丫音乐网)

    可以到《我爱音乐网》《好听音乐网》《一听音乐网》《YYMP3音乐网》还可以到《九天音乐网》永久免费听歌软件有酷狗音乐和天猫精灵,以前要跳舞经常要下载舞曲,我从QQ上找不到舞曲下载就从酷狗音乐上找,大多...

    音乐格式转换mp3软件(音乐格式转换器免费版)

    有两种方法:方法一在手机上操作:1、进入手机中的文件管理。2、在其中选择“音乐”,将显示出手机中的全部音乐。3、点击“全选”,选中所有音乐文件。4、点击屏幕右下方的省略号图标,在弹出菜单中选择“...

    电子书txt下载(免费的最全的小说阅读器)

    1.Z-library里面收录了近千万本电子书籍,需求量大。2.苦瓜书盘没有广告,不需要账号注册,使用起来非常简单,直接搜索预览下载即可。3.鸠摩搜书整体风格简洁清晰,书籍资源丰富。4.亚马逊图书书籍...

    最好免费观看高清电影(播放免费的最好看的电影)

    在目前的网上选择中,IMDb(互联网电影数据库)被认为是最全的电影网站之一。这个网站提供了各种类型的电影和电视节目的海量信息,包括剧情介绍、演员表、评价、评论等。其还提供了有关电影制作背后的详细信息,...

    孤单枪手2简体中文版(孤单枪手2简体中文版官方下载)

    要将《孤胆枪手2》游戏的征兵秘籍切换为中文,您可以按照以下步骤进行操作:首先,打开游戏设置选项,通常可以在游戏主菜单或游戏内部找到。然后,寻找语言选项或界面选项,点击进入。在语言选项中,选择中文作为游...

    取消回复欢迎 发表评论: