• 初探numpy——广播和数组操作函数


    numpy广播(Broadcast)

    若数组a,b形状相同,即a.shape==b.shape,那么a+b,a*b的结果就是对应数位的运算

    import numpy as np
    
    a=np.array([[1,2,3],[4,5,6]])
    b=np.array([[1,4,7],[2,5,8]])
    
    print(a+b,'
    ')
    print(a*b)
    
    [[ 2  6 10]
     [ 6 10 14]] 
    
    [[ 1  8 21]
     [ 8 25 48]]
    

    若两个数组形状不同,且有一个数组维度为1,则会触发广播机制

    a=np.array([[1,2,3],[4,5,6]])
    b=np.array([1,2,3])
    
    # 等同于np.array([[1,2,3],[4,5,6]])与np.array([1,2,3],[1,2,3])运算
    print(a+b,'
    ')
    print(a*b)
    
    [[2 4 6]
     [5 7 9]] 
    
    [[ 1  4  9]
     [ 4 10 18]]
    

    numpy数组操作函数

    修改数组形状

    numpy.reshape()

    不改变数据的情况下修改形状

    numpy.reshape(array , newshape , order = 'C')
    
    参数 描述
    array 要修改形状的数组
    newshape 整数或整数数组,新的形状应该兼容原有形状
    order 'C'——按行,'F'——按列,'A'——原顺序,'K'——元素咋内存中出现的顺序
    import numpy as np
    
    a_array=np.arange(16)
    print(a_array,'
    ')
    
    b_array=np.reshape(a_array,[4,4])
    print(b_array,'
    ')
    
    # 也可以打点调用
    c_array=a_array.reshape([2,8])
    print(c_array)
    
    [ 0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15] 
    
    [[ 0  1  2  3]
     [ 4  5  6  7]
     [ 8  9 10 11]
     [12 13 14 15]] 
    
    [[ 0  1  2  3  4  5  6  7]
     [ 8  9 10 11 12 13 14 15]]
    

    numpy.ndarray.flat

    numpy.ndarray.flat为数组元素迭代器

    array=np.arange(9).reshape([3,3])
    print(array,'
    ')
    
    # 按行遍历数组
    for row in array:
        print(row)
        
    # 使用数组元素迭代器
    for element in array.flat:
        print(element)
    
    [[0 1 2]
     [3 4 5]
     [6 7 8]] 
    
    [0 1 2]
    [3 4 5]
    [6 7 8]
    0
    1
    2
    3
    4
    5
    6
    7
    8
    

    numpy.ndarray.flatten和numpy.ravel

    • numpy扁平化函数
    • numpy.ndarray.flatten返回一份数组拷贝,对拷贝内容的修改不影响原始数值;
    • numpy.ravel返回一个数组的视图,修改视图时会影响原始数组
    numpy.ndarray.flatten(order = 'C')
    
    numpy.ravel(order = 'C')
    
    参数 描述
    order 'C'——按行,'F'——按列,'A'——原顺序,'K'——元素咋内存中出现的顺序
    array=np.arange(16).reshape([4,4])
    print(array,'
    ')
    
    print(array.flatten(),'
    ')
    print(array.ravel())
    
    [[ 0  1  2  3]
     [ 4  5  6  7]
     [ 8  9 10 11]
     [12 13 14 15]] 
    
    [ 0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15] 
    
    [ 0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15]
    
    a_array=np.arange(16).reshape([4,4])
    print(a_array,'
    ')
    
    #创建和a_array同样的数组b_array
    b_array=a_array.copy()
    
    c_array=a_array.ravel()
    d_array=array.flatten()
    
    print('c_array:')
    print(c_array)
    print('d_array:')
    print(d_array,'
    ')
    
    c_array[1]=100
    d_array[1]=100
    
    print('a_array:')
    print(a_array)
    print('b_array:')
    print(b_array,'
    ')
    
    [[ 0  1  2  3]
     [ 4  5  6  7]
     [ 8  9 10 11]
     [12 13 14 15]] 
    
    c_array:
    [ 0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15]
    d_array:
    [ 0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15] 
    
    a_array:
    [[  0 100   2   3]
     [  4   5   6   7]
     [  8   9  10  11]
     [ 12  13  14  15]]
    b_array:
    [[ 0  1  2  3]
     [ 4  5  6  7]
     [ 8  9 10 11]
     [12 13 14 15]] 
    

    翻转数组

    transpose和ndarray.T

    • numpy数组转置函数
    a_array=np.arange(16).reshape([4,4])
    print('a_array:
    ',a_array)
    
    print('使用transpose后:')
    print(np.transpose(a_array))
    print('使用.T转置后:')
    print(a_array.T)
    
    a_array:
     [[ 0  1  2  3]
     [ 4  5  6  7]
     [ 8  9 10 11]
     [12 13 14 15]]
    使用transpose后:
    [[ 0  4  8 12]
     [ 1  5  9 13]
     [ 2  6 10 14]
     [ 3  7 11 15]]
    使用.T转置后:
    [[ 0  4  8 12]
     [ 1  5  9 13]
     [ 2  6 10 14]
     [ 3  7 11 15]]
    

    numpy.swapaxes

    • numpy用于交换数组两个轴的函数
    numpy.swapaxes(arr , axis1, axis2)
    
    参数 描述
    arr 输入数组
    axis1 对应数组第一个轴
    axis2 对应数组第二个轴
    array=np.arange(8).reshape(2,2,2)
    print(array)
    
    # 交换第零个轴和第二个轴
    print(np.swapaxes(array,0,2))
    
    [[[0 1]
      [2 3]]
    
     [[4 5]
      [6 7]]]
    [[[0 4]
      [2 6]]
    
     [[1 5]
      [3 7]]]
    
    (0)000->(0)000 (1)001->(4)100
    (2)010->(2)010 (3)011->(6)110
    (4)100->(1)001 (5)101->(5)101
    (6)110->(3)011 (7)111->(7)111
  • 相关阅读:
    Cairngorm的command并不是一直存在,而是触发一次就创建一次command类的实例
    如何利用xml实现换行
    利用ViewStack实现页面的跳转
    让TextArea的垂直滚动条总是滚到对下面
    AS"文本显示和输入"探究
    fps
    简单的按键管理类,使ctrl+enter快捷键起作用
    mc的"animationComplete"事件需要冒泡吗?
    Javascript 利用键盘上的上下左右(回车)键模拟出tab 键的功能上下左右移动焦点
    DataTable操作中的性能问题(转载)
  • 原文地址:https://www.cnblogs.com/LRainner/p/13220977.html
Copyright © 2020-2023  润新知