numpyの汎用関数

60215 ワード

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         ,01     

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]12all        ,any      
3、axis