您的位置:首页 > 编程语言 > Python开发

numpy的通用函数

2019-08-21 20:29 2021 查看
版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/Sahar_/article/details/99994594

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))
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)
# 四舍五入之后大于20小于30的数字,修改为100
print(np.where((np.rint(arr3)>20) & (np.rint(arr3)<30),100,arr3))
# 判断是否有空值,是空值就默认为0,不是空值输出原始
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)
# 判断所有元素是否都大于0,小于20,是返回True,不是返回Flase
print(np.all((arr1>0) & (arr1<20)))
# 判断所有元素是否都大于0,小于100,是返回True,不是返回Flase
print(np.all((arr1>0) & (arr1<100)))
# 判断每列元素是否大于10
print(np.all(arr1>10,axis=0))
# 判断每列是否存在小于10的元素,存在返回True,不存在返回Flase
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指定轴

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: