zoukankan      html  css  js  c++  java
  • Python NumPy 库学习笔记三

    Python NumPy 库学习笔记三

    NumPy 广播(Broadcast)

    广播(Broadcast)是 numpy 对不同形状(shape)的数组进行数值计算的方式, 对数组的算术运算通常在相应的元素上进行。

    如果两个数组 a 和 b 形状相同,即满足 a.shape == b.shape,那么 a*b 的结果就是 a 与 b 数组对应位相乘。这要求维数相同,且各维度的长度相同。

    当运算中的 2 个数组的形状不同时,numpy 将自动触发广播机制。如:

    import numpy as np 
     
    a = np.array([[ 0, 0, 0],
               [10,10,10],
               [20,20,20],
               [30,30,30]])
    b = np.array([1,2,3])
    print(a + b)
    
    

    输出结果为:

    [[ 1  2  3]
     [11 12 13]
     [21 22 23]
     [31 32 33]]
    

    NumPy 迭代数组

    NumPy 迭代器对象 numpy.nditer 提供了一种灵活访问一个或者多个数组元素的方式。

    迭代器最基本的任务的可以完成对数组元素的访问。

    
    import numpy as np
     
    a = np.arange(6).reshape(2,3)
    print ('原始数组是:')
    print (a)
    print ('
    ')
    print ('迭代输出元素:')
    for x in np.nditer(a):
        print (x, end=", " )
    print ('
    ')
    
    

    输出结果为:

    原始数组是:
    [[0 1 2]
     [3 4 5]]
    
    迭代输出元素:
    0, 1, 2, 3, 4, 5, 
    

    控制遍历顺序

    • for x in np.nditer(a, order='F'):Fortran order,即是列序优先;
    • for x in np.nditer(a.T, order='C'):C order,即是行序优先;

    修改数组中元素的值

    nditer 对象有另一个可选参数 op_flags。 默认情况下,nditer 将视待迭代遍历的数组为只读对象(read-only),为了在遍历数组的同时,实现对数组元素值的修改,必须指定 read-write 或者 write-only 的模式。

    
    import numpy as np
     
    a = np.arange(0,60,5) 
    a = a.reshape(3,4)  
    print ('原始数组是:')
    print (a)
    print ('
    ')
    for x in np.nditer(a, op_flags=['readwrite']): 
        x[...]=2*x 
    print ('修改后的数组是:')
    print (a)
    
    

    输出结果为:

    原始数组是:
    [[ 0  5 10 15]
     [20 25 30 35]
     [40 45 50 55]]
    
    
    修改后的数组是:
    [[  0  10  20  30]
     [ 40  50  60  70]
     [ 80  90 100 110]]
    

    **使用外部循环 **

    nditer类的构造器拥有flags参数,它可以接受下列值:

    参数 描述
    c_index 可以跟踪 C 顺序的索引
    f_index 可以跟踪 Fortran 顺序的索引
    multi-index 每次迭代可以跟踪一种索引类型
    external_loop 给出的值是具有多个值的一维数组,而不是零维数组

    在下面的实例中,迭代器遍历对应于每列,并组合为一维数组。

    
    import numpy as np 
    a = np.arange(0,60,5) 
    a = a.reshape(3,4)  
    print ('原始数组是:')
    print (a)
    print ('
    ')
    print ('修改后的数组是:')
    for x in np.nditer(a, flags =  ['external_loop'], order =  'F'):  
       print (x, end=", " )
    
    

    输出结果为:

    原始数组是:
    [[ 0  5 10 15]
     [20 25 30 35]
     [40 45 50 55]]
    
    
    修改后的数组是:
    [ 0 20 40], [ 5 25 45], [10 30 50], [15 35 55],
    

    广播迭代

    如果两个数组是可广播的,nditer 组合对象能够同时迭代它们。

    
    import numpy as np 
     
    a = np.arange(0,60,5) 
    a = a.reshape(3,4)  
    print  ('第一个数组为:')
    print (a)
    print  ('
    ')
    print ('第二个数组为:')
    b = np.array([1,  2,  3,  4], dtype =  int)  
    print (b)
    print ('
    ')
    print ('修改后的数组为:')
    for x,y in np.nditer([a,b]):  
        print ("%d:%d"  %  (x,y), end=", " )
    
    

    输出结果为:

    第一个数组为:
    [[ 0  5 10 15]
     [20 25 30 35]
     [40 45 50 55]]
    
    
    第二个数组为:
    [1 2 3 4]
    
    
    修改后的数组为:
    0:1, 5:2, 10:3, 15:4, 20:1, 25:2, 30:3, 35:4, 40:1, 45:2, 50:3, 55:4,
    

    Numpy 数组操作

    Numpy 中包含了一些函数用于处理数组,大概可分为以下几类:

    修改数组形状

    函数 描述
    reshape 不改变数据的条件下修改形状
    flat 数组元素迭代器
    flatten 返回一份数组拷贝,对拷贝所做的修改不会影响原始数组
    ravel 返回展开数组

    翻转数组

    函数 描述
    transpose 对换数组的维度
    ndarray.T self.transpose() 相同
    rollaxis 向后滚动指定的轴
    swapaxes 对换数组的两个轴

    修改数组维度

    维度 描述
    broadcast 产生模仿广播的对象
    broadcast_to 将数组广播到新形状
    expand_dims 扩展数组的形状
    squeeze 从数组的形状中删除一维条目

    连接数组

    函数 描述
    concatenate 连接沿现有轴的数组序列
    stack 沿着新的轴加入一系列数组。
    hstack 水平堆叠序列中的数组(列方向)
    vstack 竖直堆叠序列中的数组(行方向)

    分割数组

    函数 数组及操作
    split 将一个数组分割为多个子数组
    hsplit 将一个数组水平分割为多个子数组(按列)
    vsplit 将一个数组垂直分割为多个子数组(按行)

    数组元素的添加与删除

    函数 元素及描述
    resize 返回指定形状的新数组
    append 将值添加到数组末尾
    insert 沿指定轴将值插入到指定下标之前
    delete 删掉某个轴的子数组,并返回删除后的新数组
    unique 查找数组内的唯一元素
  • 相关阅读:
    php 本地 备份远程mysql和mdb 多任务只执行一次
    c# 监控服务器上传木马(包含可疑文件)
    jquery 简短 右键菜单 兼容ie6 ie7 ie8 firefox chrome
    分解从身份证中读回的户籍地址
    备份mysql(一表一文件)
    THINKPHP 3.0 整合KINDEDITOR 4.05
    c# 仿照计划任务(定时提示、定时运行程序、定时打开url(前台/后台))/每天/每周/每月/一次 多时间段
    php基本操作echo
    c# 扫描可疑文件(找到木马)(简)
    GOOGLE 地图,查询地名,移动标记,生成静态地图
  • 原文地址:https://www.cnblogs.com/songbiao/p/12498733.html
Copyright © 2011-2022 走看看