ufunc函数是针对数组进行操作的函数,常用的ufunc函数运算有四则运算、比较运算和逻辑运算等。
数组的四则运算,如代码 45所示。
| In[16]: | x = np.array([1,2,3]) y = np.array([4,5,6]) print('数组相加结果为:',x + y) #数组相加 |
| Out[16]: | 数组相加结果为: [5 7 9] |
| In[17]: | print('数组相减结果为:',x - y) #数组相减 |
| Out[17]: | 数组相减结果为: [-3 -3 -3] |
| In[18]: | print('数组相乘结果为:',x * y) #数组相乘 |
| Out[18]: | 数组相乘结果为: [ 4 10 18] |
| In[19]: | print('数组相除结果为:',x / y) #数组相除 |
| Out[19]: | 数组相除结果为: [ 0.25 0.4 0.5 ] |
| In[20]: | print('数组幂运算结果为:',x ** y) #数组幂运算 |
| Out[20]: | 数组幂运算结果为: [ 1 32 729] |
比较运算返回的结果是一个布尔数组,每个元素为每个数组对应元素的比较结果,如代码 46所示。
| In[21]: | x = np.array([1,3,5]) y = np.array([2,3,4]) print('数组比较结果为:',x < y) |
| Out[21]: | 数组比较结果为: [ True False False] |
| In[22]: | print('数组比较结果为:',x > y) |
| Out[22]: | 数组比较结果为: [False False True] |
| In[23]: | print('数组比较结果为:',x == y) |
| Out[24]: | 数组比较结果为: [False True False] |
| In[24]: | print('数组比较结果为:',x >= y) |
| Out[24]: | 数组比较结果为: [False True True] |
| In[25]: | print('数组比较结果为:',x <= y) |
| Out[25]: | 数组比较结果为: [ True True False] |
| In[26]: | print('数组比较结果为:',x != y) |
| Out[26]: | 数组比较结果为: [ True False True] |
在NumPy逻辑运算中,np.any函数表示逻辑“or”,np.all函数表示逻辑“and”,如代码 47所示。
| In[27]: | print('数组逻辑运算结果为:',np.all(x == y)) # np.all()表示逻辑and |
| Out[27]: | 数组逻辑运算结果为: False |
| In[28]: | print('数组逻辑运算结果为:',np.any(x == y)) # np.any()表示逻辑or |
| Out[28]: | 数组逻辑运算结果为: True |
以一维数组和二维数组举例说明广播的运算机制。
一维数组的广播机制,如代码 48所示。
代码 48 一维数组的广播机制
| In[29]: | arr1 = np.array([[0,0,0],[1,1,1],[2,2,2],[3,3,3]]) print('创建的数组1为:',arr1) |
| Out[29]: | 创建的数组1为: [[0 0 0] [1 1 1] [2 2 2] [3 3 3]] |
| In[30]: | print('数组1的shape为:',arr1.shape) |
| Out[30]: | 数组1的shape为: (4, 3) |
| In[31]: | arr2 = np.array([1,2,3]) print('创建的数组2为:',arr2) |
| Out[31]: | 创建的数组2为: [1 2 3] |
| In[32]: | print('数组2的shape为:',arr2.shape) |
| Out[32]: | 数组2的shape为: (3,) |
| In[33]: | print('数组相加结果为:',arr1 + arr2) |
| Out[33]: | 数组相加结果为: [[1 2 3] [2 3 4] [3 4 5] [4 5 6]] |
二维数组的广播机制,如代码 49所示。
代码 49 二维数组的广播机制
| In[34]: | arr1 = np.array([[0,0,0],[1,1,1],[2,2,2],[3,3,3]]) print('创建的数组1为:',arr1) |
| Out[34]: | 创建的数组1为: [[0 0 0] [1 1 1] [2 2 2] [3 3 3]] |
| In[35]: | print('数组1的shape为:',arr1.shape) |
| Out[35]: | 数组1的shape为: (4, 3) |
| In[36]: | arr2 = np.array([1,2,3,4]).reshape((4,1)) print('创建的数组2为:',arr2) |
| Out[36]: | 创建的数组2为: [[1] [2] [3] [4]] |
| In[37]: | print('数组2的shape为:',arr2.shape) |
| Out[37]: | 数组2的shape为: (4, 1) |
| In[38]: | print('数组相加结果为:',arr1 + arr2) |
| Out[38]: | 数组相加结果为: [[1 1 1] [3 3 3] [5 5 5] [7 7 7]] |