numpy广播(Broadcast)

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

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

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

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

numpy数组操作函数

修改数组形状

numpy.reshape()

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

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

numpy.ndarray.flat

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

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

numpy.ndarray.flatten和numpy.ravel

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

翻转数组

transpose和ndarray.T

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

numpy.swapaxes

  • numpy用于交换数组两个轴的函数
  1. numpy.swapaxes(arr , axis1, axis2)
参数 描述
arr 输入数组
axis1 对应数组第一个轴
axis2 对应数组第二个轴
  1. array=np.arange(8).reshape(2,2,2)
  2. print(array)
  3. # 交换第零个轴和第二个轴
  4. print(np.swapaxes(array,0,2))
  1. [[[0 1]
  2. [2 3]]
  3. [[4 5]
  4. [6 7]]]
  5. [[[0 4]
  6. [2 6]]
  7. [[1 5]
  8. [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