轴(axis)
在numpy中可以理解为方向,使用0、1、2...数字表示,对于一个一维数组,只有1个0轴,对于一个二维数组,有0、1轴,对于三维数组,有0、1、2轴。
import numpy as np a = np.array(np.arange(24).reshape((4,3,2))) print('取整个:') print(a[...]) print(a) print('取行:') print(a[1]) print('取连续多行:') print(a[:-1]) print('取不连续多行:') print(a[1:3]) print('取列:') print(a[:,2]) print('取连续的多列:') print(a[:,:-1]) print('取不连续的多列:') print(a[:,1:2]) print('取多行多列:') print(a[:3,:2,])
通过布尔索引修改数组的值
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
import numpy as np a = np.array(np.arange(24).reshape((4,3,2))) print(a < 10) #[[[ True True] # [ True True] # [ True True]] # [[ True True] # [ True True] # [False False]] # [[False False] # [False False] # [False False]] # [[False False] # [False False] # [False False]]] a[a < 10]=0 print(a) #[[[ 0 0] # [ 0 0] # [ 0 0]] # [[ 0 0] # [ 0 0] # [10 11]] # [[12 13] # [14 15] # [16 17]] # [[18 19] # [20 21] # [22 23]]] a[a >= 10]=20 print(a) #[[[ 0 0] # [ 0 0] # [ 0 0]] # [[ 0 0] # [ 0 0] # [20 20]] # [[20 20] # [20 20] # [20 20]] # [[20 20] # [20 20] # [20 20]]]
①np.arange()
作用:创建自定义数组
start:起始值,默认为0
stop:终止值(不包含)
step:步长,默认为1
dtype:返回ndarray
的数据类型,如果没有提供,则会使用输入数据的类型。
import numpy as np a = np.arange(10,20,2,dtype = float) print(a) #[10. 12. 14. 16. 18.] print(a.dtype) #float64
②np.resize()
作用:修改数组形状
a = a.reshape((5,1)) print(a) #[[10.] # [12.] # [14.] # [16.] # [18.]] a = a.reshape((1,5)) print(a) #[[10. 12. 14. 16. 18.]]
③np.flatten()
作用:将数据进行扁平化
import numpy as np a = np.arange(10,dtype = float).reshape((2,5)) print(a) #[[0. 1. 2. 3. 4.] #[5. 6. 7. 8. 9.]] print(a.flatten()) #[0. 1. 2. 3. 4. 5. 6. 7. 8. 9.]
④np.array()
作用:生成np.ndarray类型的数组
import numpy as np a = np.array(np.arange(10)) print(type(a),a) #<class 'numpy.ndarray'> [0 1 2 3 4 5 6 7 8 9]
⑤np.astype()
作用:修改数据的类型
import numpy as np a = np.array(np.arange(5),dtype=np.bool) print(type(a),a) # <class 'numpy.ndarray'> [False True True True True] a = a.astype(np.float32) print(type(a),a) # <class 'numpy.ndarray'> [0. 1. 1. 1. 1.]
⑥np.round()
作用:给数据指定取小数
import numpy as np a = np.array([np.random.rand() for i in range(10)],dtype=np.float32) #取两位小数 a = np.round(a,2) #[0.8 0.84 0.95 0.26 0.17 0.56 0.55 0.89 0.17 0.58] print(a)
⑦np.where()
作用:类似python的三目运算符
import numpy as np a = np.array(np.arange(24).reshape((4,3,2))) a = np.where(a > 10,5,3) print(a) #[[[3 3] # [3 3] # [3 3]] # [[3 3] # [3 3] # [3 5]] # [[5 5] # [5 5] # [5 5]] # [[5 5] # [5 5] # [5 5]]]
⑧np.clip()
作用:把数组的值限制在a_min,a_max之间,大于a_max就使这个值等于a_max,小于a_min就使这个值等于a_min
import numpy as np a = np.array(np.arange(10).reshape((2,5,1))) a = a.clip(3,5) print(a) #[[[3] # [3] # [3] # [3] # [4]] # [[5] # [5] # [5] # [5] # [5]]]
⑨np.vstack()、np.hstack()
作用:把数组进行垂直拼接和水平拼接
import numpy as np a = np.array(np.arange(10)) b = np.array(np.arange(10,20)) print(a) #[0 1 2 3 4 5 6 7 8 9] print(b) #[10 11 12 13 14 15 16 17 18 19] #垂直拼接 a_v_b = np.vstack((a,b)) print(a_v_b) #[[ 0 1 2 3 4 5 6 7 8 9] # [10 11 12 13 14 15 16 17 18 19]] #水平拼接 a_h_b = np.hstack(((a,b))) print(a_h_b) #[ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19]
⑩np.argmax()、np.argmin()
作用:找出最大或最小的参数
import numpy as np a = np.array([np.random.randint(0,100) for i in range(10)]) print(a) #[42 61 37 95 47 8 24 79 92 51] print('a maxarg:',np.argmax(a)) #a maxarg: 3 print('a minarg:',np.argmin(a)) #a minarg: 5 print('a max:',np.max(a)) #a max: 95 print('a min:',np.min(a)) #a min: 8
⑪np.random.uniform()
low:采样下界,float类型,默认值0
high:采样上界,float类型,默认值1
size:输出目标样本数目,可以int也可以tuple
import numpy as np a = np.random.uniform(1,3,(2,3)) b = np.random.uniform(2,3,4) print(a) #[[1.99346576 1.58600127 1.00780443] # [2.34397263 1.15202644 1.88763743]] print(b) #[2.89086976 2.1703291 2.80912443 2.04031375]
计算:
例1:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
import numpy as np a = np.arange(20,dtype = float).reshape((2,5,2)) # b = np.arange(40,dtype = float).reshape((4,5,2)) print(a + 2) # [[[ 2. 3.] # [ 4. 5.] # [ 6. 7.] # [ 8. 9.] # [10. 11.]] # [[12. 13.] # [14. 15.] # [16. 17.] # [18. 19.] # [20. 21.]]] print(a - 2) # [[[-2. -1.] # [ 0. 1.] # [ 2. 3.] # [ 4. 5.] # [ 6. 7.]] # [[ 8. 9.] # [10. 11.] # [12. 13.] # [14. 15.] # [16. 17.]]] print(a * 2) # [[[ 0. 2.] # [ 4. 6.] # [ 8. 10.] # [12. 14.] # [16. 18.]] # [[20. 22.] # [24. 26.] # [28. 30.] # [32. 34.] # [36. 38.]]] print(a / 0) # [[[nan inf] # [inf inf] # [inf inf] # [inf inf] # [inf inf]] # [[inf inf] # [inf inf] # [inf inf] # [inf inf] # [inf inf]]]
例2:
特性:一些不同维度的数组也能够通过他们的后缘维度,即从末尾开始算起的维度的轴长度相符或者其中一方的长度为1,则认为他们是广播兼容的,广播会在缺失和长度为1的维度上进行。
import numpy as np a1 = np.arange(20,dtype = float).reshape((2,5,2)) b1= np.arange(10,dtype = float).reshape((5,2)) print(a1 + b1) # [[[ 0. 2.] # [ 4. 6.] # [ 8. 10.] # [12. 14.] # [16. 18.]] # [[10. 12.] # [14. 16.] # [18. 20.] # [22. 24.] # [26. 28.]]] a2 = np.arange(20,dtype = float).reshape((2,5,2)) b2 = np.arange(5,dtype = float).reshape((5,1)) print(a2 + b2) # [[[ 0. 1.] # [ 3. 4.] # [ 6. 7.] # [ 9. 10.] # [12. 13.]] # [[10. 11.] # [13. 14.] # [16. 17.] # [19. 20.] # [22. 23.]]]
其他:
1.numpy中的nan(NAN,NAN):not a number表示的是不是一个数字,我们在读取本地文件为float时,如果有缺失,就会出现nan,像做了一个不合适的计算时。
2.inf(-inf,inf):infinity.inf表示正无穷,-inf表示负正无穷
import numpy as np a = np.nan b = np.nan #1.两个nan是不相等的 print(a==b) #False print(a!=b) #True #2.判断数组中nan的个数 c = np.array([1,2,np.nan,np.nan]) print(np.count_nonzero(c!=c)) #2 #3.判断数据是否为nan,并将它替换 c[np.isnan(c)]=0 print(c) #[1. 2. 0. 0.] #4.nan和任何值计算都为nan print(np.nan+6) #nan
注意:
在一组数据中单纯的把nan值替换为0,替换之前平均值如果都大于0,替换之后的均值肯定会更小,所以一般的方式是把缺失的值替换为均值(中值)或者是删除有缺失的一行。