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

    技术2022-07-11  89

    广播和数组操作函数

    numpy广播(Broadcast)numpy数组操作函数修改数组形状numpy.reshape()numpy.ndarray.flatnumpy.ndarray.flatten和numpy.ravel 翻转数组transpose和ndarray.Tnumpy.swapaxes

    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,'\n') 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,'\n') 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,'\n') b_array=np.reshape(a_array,[4,4]) print(b_array,'\n') # 也可以打点调用 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,'\n') # 按行遍历数组 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,'\n') print(array.flatten(),'\n') 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,'\n') #创建和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,'\n') c_array[1]=100 d_array[1]=100 print('a_array:') print(a_array) print('b_array:') print(b_array,'\n') [[ 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:\n',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
    Processed: 0.010, SQL: 9