numpy的通用函数

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、返回的是布尔值
2all需要元素全部符合,any至少一位满足
3、axis指定轴

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值