4、通用函数(ufunc)
4.1 一元计算函数
import numpy as np
arr1 = np.random.uniform(-5,10,(3,4))
print(arr1)
print('向上取整')
print(np.ceil(arr1))
print('向下取整')
print(np.floor(arr1))
print('四舍五入')
print(np.rint(arr1))
print('取绝对值')
print(np.abs(arr1))
print('取相反数')
print(np.negative(arr1))
print(np.negative(-1))
print('平方')
print(np.square(arr1))
print('取绝对值之后平方根')
print(np.sqrt(np.abs(arr1)))
print('分成小数与整数部分')
print(np.modf(arr1)[0])
print(np.modf(arr1)[1])
print('判断是否是空值')
print(np.isnan(arr1))
展示:
[[ 7.40388163 -2.16076085 5.71059497 -1.54591523]
[ 6.95716697 1.92224912 1.35926832 -0.45224724]
[-3.12226763 -1.88739917 -4.73912872 -4.80680889]]
向上取整
[[ 8. -2. 6. -1.]
[ 7. 2. 2. -0.]
[-3. -1. -4. -4.]]
向下取整
[[ 7. -3. 5. -2.]
[ 6. 1. 1. -1.]
[-4. -2. -5. -5.]]
四舍五入
[[ 7. -2. 6. -2.]
[ 7. 2. 1. -0.]
[-3. -2. -5. -5.]]
取绝对值
[[7.40388163 2.16076085 5.71059497 1.54591523]
[6.95716697 1.92224912 1.35926832 0.45224724]
[3.12226763 1.88739917 4.73912872 4.80680889]]
取相反数
[[-7.40388163 2.16076085 -5.71059497 1.54591523]
[-6.95716697 -1.92224912 -1.35926832 0.45224724]
[ 3.12226763 1.88739917 4.73912872 4.80680889]]
1
平方
[[54.81746326 4.66888743 32.61089487 2.38985389]
[48.4021722 3.69504166 1.84761035 0.20452756]
[ 9.74855517 3.56227562 22.45934099 23.10541167]]
取绝对值之后平方根
[[2.72100747 1.46995267 2.38968512 1.24334839]
[2.63764421 1.38645199 1.16587663 0.6724933 ]
[1.76699395 1.37382647 2.176954 2.19244359]]
分成小数与整数部分
[[ 0.40388163 -0.16076085 0.71059497 -0.54591523]
[ 0.95716697 0.92224912 0.35926832 -0.45224724]
[-0.12226763 -0.88739917 -0.73912872 -0.80680889]]
[[ 7. -2. 5. -1.]
[ 6. 1. 1. -0.]
[-3. -1. -4. -4.]]
判断是否是空值
[[False False False False]
[False False False False]
[False False False False]]
注意点:
isnan这个函数,一般配合条件索引
4.2 二元计算函数
arr1 = np.arange(10).reshape((2,5))
arr2 = np.arange(10,20).reshape((2,5))
print('arr1',arr1)
print('arr2',arr2)
print('两个数组之间的相加操作')
print(np.add(arr1,arr2))
print('两个数组之间的相减')
print(np.subtract(arr1,arr2))
print('两个数组之间的相除')
print(np.divide(arr1,arr2))
print(np.floor_divide(arr1,arr2))
print(np.mod(arr1,arr2))
print('元素相乘')
print(np.multiply(arr1,arr2))
展示:
arr1 [[0 1 2 3 4]
[5 6 7 8 9]]
arr2 [[10 11 12 13 14]
[15 16 17 18 19]]
两个数组之间的相加操作
[[10 12 14 16 18]
[20 22 24 26 28]]
两个数组之间的相减
[[-10 -10 -10 -10 -10]
[-10 -10 -10 -10 -10]]
两个数组之间的相除
[[0. 0.09090909 0.16666667 0.23076923 0.28571429]
[0.33333333 0.375 0.41176471 0.44444444 0.47368421]]
[[0 0 0 0 0]
[0 0 0 0 0]]
[[0 1 2 3 4]
[5 6 7 8 9]]
元素相乘
[[ 0 11 24 39 56]
[ 75 96 119 144 171]]
4.3 三元计算函数
arr1 = np.arange(10).reshape((2, 5))
arr2 = np.arange(10, 20).reshape((2, 5))
print('arr1', arr1)
print('arr2', arr2)
print(np.where(arr1 % 2 == 0, arr1, 100))
print('#############')
print(np.where(arr1 > arr2, arr1, arr2))
print('$$$$$$$$$$$$')
list1 = arr1.tolist()
list2 = arr2.tolist()
print([x if x>y else y for x,y in zip(list1,list2)])
arr3 = np.random.uniform(10,50,(3,4))
print(arr3)
print(np.where((np.rint(arr3)>20) & (np.rint(arr3)<30),100,arr3))
print(np.where(np.isnan(arr3),0,arr3))
展示:
arr1 [[0 1 2 3 4]
[5 6 7 8 9]]
arr2 [[10 11 12 13 14]
[15 16 17 18 19]]
[[ 0 100 2 100 4]
[100 6 100 8 100]]
[[10 11 12 13 14]
[15 16 17 18 19]]
$$$$$$$$$$$$
[[10, 11, 12, 13, 14], [15, 16, 17, 18, 19]]
[[42.1366265 25.04062239 13.17674991 34.65152513]
[16.06540995 30.29572491 41.49376874 42.42785617]
[30.78561853 41.58242411 13.1441147 33.74916931]]
[[ 42.1366265 100. 13.17674991 34.65152513]
[ 16.06540995 30.29572491 41.49376874 42.42785617]
[ 30.78561853 41.58242411 13.1441147 33.74916931]]
[[42.1366265 25.04062239 13.17674991 34.65152513]
[16.06540995 30.29572491 41.49376874 42.42785617]
[30.78561853 41.58242411 13.1441147 33.74916931]]
4.4 常用的元素统计函数
axis是指按照指定轴计算,0代表的是列,1代表的是行
arr1 = np.arange(1,50).reshape((7,7))
print(arr1)
print('#######')
print(np.mean(arr1,axis=1))
print(np.mean(arr1,axis=0))
print(np.mean(arr1))
print('########')
print(np.sum(arr1))
print(np.max(arr1))
print(np.min(arr1))
print(np.std(arr1))
print(np.var(arr1))
print(np.argmax(arr1))
print(np.argmax(arr1,axis=0))
print(np.argmin(arr1))
print(np.cumsum(arr1))
print(np.cumprod(arr1))
展示:
[[ 1 2 3 4 5 6 7]
[ 8 9 10 11 12 13 14]
[15 16 17 18 19 20 21]
[22 23 24 25 26 27 28]
[29 30 31 32 33 34 35]
[36 37 38 39 40 41 42]
[43 44 45 46 47 48 49]]
[ 4. 11. 18. 25. 32. 39. 46.]
[22. 23. 24. 25. 26. 27. 28.]
25.0
1225
49
1
14.142135623730951
200.0
48
[6 6 6 6 6 6 6]
0
[ 1 3 6 10 15 21 28 36 45 55 66 78 91 105
120 136 153 171 190 210 231 253 276 300 325 351 378 406
435 465 496 528 561 595 630 666 703 741 780 820 861 903
946 990 1035 1081 1128 1176 1225]
[ 1 2 6 24 120 720
5040 40320 362880 3628800 39916800 479001600
1932053504 1278945280 2004310016 2004189184 -288522240 -898433024
109641728 -2102132736 -1195114496 -522715136 862453760 -775946240
2076180480 -1853882368 1484783616 -1375731712 -1241513984 1409286144
738197504 -2147483648 -2147483648 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
0]
4.5 判断函数
arr1 = np.random.randint(0,50,(4,4))
print(arr1)
print(np.all((arr1>0) & (arr1<20)))
print(np.all((arr1>0) & (arr1<100)))
print(np.all(arr1>10,axis=0))
print(np.any(arr1<10,axis=0))
展示:
[[49 45 24 11]
[23 8 30 5]
[48 21 43 14]
[ 8 33 38 2]]
False
True
[False False True False]
[ True True False True]
注意点:
1、返回的是布尔值
2、all需要元素全部符合,any至少一位满足
3、axis指定轴