numpy广播(Broadcast)
若数组a,b形状相同,即a.shape==b.shape,那么a+b,a*b的结果就是对应数位的运算
import numpy as npa=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 npa_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]012345678
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_arrayb_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]=100d_array[1]=100print('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 |
