机器学习与飞桨PaddlePaddle开发笔记–NumPy常规操作(下)
文章目录
7、将一维数组转换成二维数组
首先,创建一个有20个随机整数的一维数组。
arr=np.random.rand(20)
然后,使用reshape()函数将其转换为二维数组。
arr=np.random.rand(20)
arr
#输出结果
array([[0.18604367, 0.84941193, 0.67359282, 0.12343112, 0.77476772],
[0.08160017, 0.43490967, 0.55116756, 0.420668 , 0.46360988],
[0.73438105, 0.43873222, 0.62009598, 0.17735862, 0.43739677],
[0.46101064, 0.30245784, 0.79586015, 0.28412212, 0.16137361]])
注意:
在使用reshape()进行转换时,要保证行列数相乘后与元素数量相等。
8、定位NumPy数组中的最大值和最小值
使用max()和min()函数,分别可以得到数组中的最大值和最小值。
arr2=np.random.randint(0,20,10)
#输出结果
array([13, 9, 7, 15, 2, 1, 18, 3, 16, 15])
arr2.max() #返回最大的数字18
arr2.min() #返回最小的数字3
使用argmax()和argmin()函数,分别可以定位数组中的最大值和最小值的下标。
arr2.argmax() #返回最大的数字的下标6
arr2.argmin() #返回最小的数字的下标5
9、从NumPy数组中索引/选择多个元素(组)
在NumPy数组中进行索引与在Python中类似,只需要在方括号中指定下标即可。
my_array=np.arange(0,13)
my_array[8]
#输出结果
8
要获得数组中的一系列值,可以使用切片符“:”,这和Python中的使用方法一样。
my_array[2:6]
#输出结果
array([2, 3, 4, 5])
my_array[:5]
#输出结果
array([0, 1, 2, 3, 4])
my_array[5:]
#输出结果
array([ 5, 6, 7, 8, 9, 10, 11, 12])
同样也可以使用[ ] [ ] 或[,]在二维数组中选择元素。
现在使用[ ] [ ]从下面的二维数组中抓取值 60
two_d_arr=np.array([[10,20,30],[40,50,60],[70,80,90]])
two_d_arr[1][2]
#输出结果
60
使用[,]从上面的二维数组中抓取值20
two_d_arr[0,1]
#输出结果
20
也可以用切片符抓取二维数组的子部分。使用下面的操作从数组中抓取一些元素。
two_d_arr[:1,:2] #返回[[10, 20]]
two_d_arr[:2,1:] #返回([[20, 30],[50, 60]])
two_d_arr[:2,:2] #返回([[10, 20],[40, 50]])
索引一整行或一整列,只需要使用使用索引数字即可抓取任意一行。
two_d_arr[0] #返回第一行([10,20,30])
可以使用&、|、<,>和==运算符对数组执行条件选择和逻辑选择,从而对比数组中的值和给定值。
new_arr=np.arange(5,15)
new_arr>10
#输出结果
array([False, False, False, False, False, False, True, True, True,
True])
组合使用条件运算符和逻辑运算符,可以得到值大于3且小于10的元素。
new_arr[(new_arr>3)&(new_arr<10)]
#输出结果
array([5, 6, 7, 8, 9])
10、广播机制
广播机制是NumPy非常重要的一个特点,它允许NumPy扩展矩阵间的运算。例如,它会隐式地把一个数组的异常维度调整到与另一个算子相匹配的维度以实现维度兼容。例如,将一个维度为[3,2]的矩阵与另一个维度为[3,1]的矩阵相加是合法的,NumPy会自动将第二个矩阵扩展到等同的维度。
为了定义两个形状是否可以兼容,NumPy从最后开始往前逐个比较它们的维度大小。在这个过程中,如果两者的对应维度相同,或者其中一个(或者两者都)等于1,则继续进行比较,直到最前面的维度。若不满足这两个条件,程序就会报错。
最简单的广播机制是快速改变NumPy数组中的值,例如,将索引为0~5的元素的初始值改为20.
my_array=np.arange(0,13)
my_array[0:5]=20
#输出结果
array([20, 20, 20, 20, 20, 5, 6, 7, 8, 9, 10, 11, 12])
当两个矩阵维度不匹配时,使用以下代码。
a=np.array([1.0,2.0,3.0,4.0,5.0,6.0]).reshape(3,2)
b=np.array([3.0])
a*b
#输出结果
array([[ 3., 6.],
[ 9., 12.],
[15., 18.]])
11、对NumPy数组执行数学运算
对NumPy数组执行数学运算的语法就和你想象的一样。
arr=np.arange(1,11)
arr*arr
arr+arr
arr-arr
arr/arr
还可以通过NumPy广播机制批量对数组执行标量运算。
arr+50
NumPy还允许在数组上执行通用函数,如平方根函数、指数函数和三角函数等。
np.sqrt(arr)
np.exp(arr)
np.sin(arr)
np.cos(arr)
np.log(arr)
np.sum(arr)
np.std(arr)
11、对NumPy数组执行点积(内积)运算
我们一般使用mp.dot()执行点积运算,如同NumPy官网指出的,如果a和b都是一维数组,它的作用是计算机内积(不进行复共轭)。执行点积运算的前提是左边矩阵的列数(每行的元素)必须等于右边矩阵的行数,否则就会报错。对于秩为1的数组,对应位置的元素先相乘,然后再相加;对于秩不为1的二维数组,执行矩阵乘法运算。下面的例子展示了二维数组的点积运算。
i=np.eye(3)
i
#输出结果
array([[1., 0., 0.],
[0., 1., 0.],
[0., 0., 1.]])
d=np.arange(1,10).reshape(3,3)
d
#输出结果
array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
m=np.dot(d,i)
m
#输出结果
array([[1., 2., 3.],
[4., 5., 6.],
[7., 8., 9.]])
总结
以上就是我总结的NumPy的全部常用操作,希望能起到抛砖引玉的作用,新人博主,欢迎收藏关注。