Python|Python数据科学包-初识numpy


文章目录

  • 1、numpy & pandas 有什么用
  • 2、numpy & pandas 安装 (教学教程)
  • 3、 numpy 属性 (教学教程)
  • 4、numpy 的创建 array
  • 5、numpy的基础运算
  • 6、numpy的基础运算(二)
  • 7、numpy的索引
  • 8、numpy的 array 合并
  • 9、numpy的 array 分隔
  • 10、numpy的 copy & deep copy

1、numpy & pandas 有什么用 为什么用numpy & pandas?
答:numpy & pandas是科学计算包,计算速度会快很多倍
2、numpy & pandas 安装 (教学教程) 安装 Anaconda 以及numpy、 Scikit-learn 等必备库,参考以下链接
https://blog.csdn.net/tz_zs/article/details/73459800?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-4&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-4
anaconda建造新的环境,参考以下链接
https://blog.csdn.net/x_iesheng/article/details/79725415?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromBaidu-1&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromBaidu-1
3、 numpy 属性 (教学教程)
import numpy as np array = np.array([[1,2,3], [2,3,4]]) print(array) print('number of dim:',array.ndim)#2维 print('shape:',array.shape)#2行3列 print('size:',array.size)#总共6个元素 ''' 运行结果 [[1 2 3] [2 3 4]] number of dim: 2 shape: (2, 3) size: 6 '''

4、numpy 的创建 array 初识array arange linspace reshape
import numpy as np a = np.array([[2,23,4], [2,32,4]])#定义一个2行3列的矩阵 print('a:',a) #打印结果之间,无逗号分隔 b=np.zeros((3,4))#定义一个3行4列的零矩阵 print('b:',b) c=np.ones((3,4),dtype=np.int16)#定义一个3行4列的1矩阵 print('c:',c) d=np.empty((3,4))#定义一个3行4列的无穷小值矩阵 print('d:',d) e=np.arange(10,20,2)#定义一个初始值为10,终止值为20,步长为2的数列 print('e:',e) f= np.arange(12).reshape((3,4))#把数列重新定义成一个3行4列的矩阵 print('f:',f) g= np.linspace(1,10,20)#定义一个初始值为10,终止值为20,20段的线段 print('g:',g) h= np.linspace(1,10,6).reshape((2,3))#定义一个初始值为10,终止值为20,20段的线段,再重写线段为2行2列的矩阵 print('h:',h) ''' 运行结果 a: [[ 2 234] [ 2 324]] b: [[ 0.0.0.0.] [ 0.0.0.0.] [ 0.0.0.0.]] c: [[1 1 1 1] [1 1 1 1] [1 1 1 1]] d: [[1.44635488e-3071.33511562e-3061.69121775e-3061.69122046e-306] [1.05700260e-3071.11259601e-3062.04721870e-3062.04721870e-306] [1.06809181e-3066.23057349e-3078.90068589e-3081.44635488e-307]] e: [10 12 14 16 18] f: [[ 0123] [ 4567] [ 89 10 11]] g: [1.1.473684211.947368422.421052632.89473684 3.368421053.842105264.315789474.789473685.26315789 5.736842116.210526326.684210537.157894747.63157895 8.105263168.578947379.052631589.5263157910.] h: [[1.2.84.6] [6.48.210. ]] '''

5、numpy的基础运算 数列运算
import numpy as np a = np.array([10,20,30,40])#定义一个1维数列 b=np.arange(4)#定义一个4个元素的1维数列 print(a,b) c=a-b#数列相减,一一对应 d=a+b#数列相加,一一对应 e=a*b#数列相乘,一一对应 f=a**2#数列平方,一一对应 g=10*np.sin(a)#求sin函数print(c,d,e,f,g,b<3,sep='\n') ''' 运行结果 [10 20 30 40] [0 1 2 3] [10 19 28 37] [10 21 32 43] [02060 120] [ 100400900 1600] [-5.440211119.12945251 -9.880316247.4511316 ] [ TrueTrueTrue False] '''

矩阵运算
import numpy as np a = np.array([[1,1], [0,1]]) b=np.arange(4).reshape((2,2)) c=a*b#数列运算,一一对应 c_dot=np.dot(a,b)#矩阵运算,和线性代数中运算方法一致 c_dot_2=a.dot(b)#矩阵运算第二种写法 print('a:',a) print('b:',b) print('c:',c) print('c_dot:',c_dot) print('c_dot_2:',c_dot_2) ''' 运行结果 a: [[1 1] [0 1]] b: [[0 1] [2 3]] c: [[0 1] [0 3]] c_dot: [[2 4] [2 3]] c_dot_2: [[2 4] [2 3]] '''

axis操作
import numpy as np a = np.random.random((2,4))#定义一个随机的2行4列的数组 b=np.sum(a)#数组所有元素的和 c=np.min(a)#数组所有元素中的最小值 d=np.max(a)#数组所有元素中的最大值 e=np.min(a,axis=0)#数组每列中的最小值 f=np.max(a,axis=1)#数组每行中的最大值 print('a:',a) print('b:',b) print('c:',c) print('d:',d) print('e:',e) print('f:',f) ''' 运行结果 a: [[ 0.326102430.116493990.563864010.00982775] [ 0.514069670.445148350.301274330.32724873]] b: 2.60402925453 c: 0.00982774954999 d: 0.563864011448 e: [ 0.326102430.116493990.301274330.00982775] f: [ 0.563864010.51406967] '''

6、numpy的基础运算(二) argmax、argmin、mean、average、cumsum、diff、nonzero、sort、transpose、clip
import numpy as np a = np.arange(2,14).reshape((3,4))#定义一个值为2~14的数组,并改写成3行4列 b=np.argmax(a)#返回数组中最大值的序号 c=np.argmin(a)#返回数组中最小值的序号 d=np.mean(a)#返回数组中的平均值 e=a.mean()#求平均值的另一种写法 f=np.average(a)#返回数组中的平均值 g=np.cumsum((a))#返回数组元素以斐波那契数列方式的计算值,换回数组个数与之前一样 h=np.diff(a)#返回数组元素的两数之差,返回的数组元素个数为(a的行数-1)*a的列数 i=np.nonzero(a)#返回数组a中非零值的行序和列序 j=np.sort(a)#数组a排序,但维持原有维度不变 k=np.transpose(a)#矩阵转置 o=(a.T).dot(a)#矩阵转置然后和自身做矩阵乘法 p=np.clip(a,5,9)#矩阵中小于5的值会变成5,大于9的值会变成9print('a:',a) print('b:',b) print('c:',c) print('d:',d) print('e:',e) print('f:',f) print('g:',g) print('h:',h) print('i:',i) print('j:',j) print('k:',k) print('o:',o) print('p:',p) ''' 运行结果 a: [[ 2345] [ 6789] [10 11 12 13]] b: 11 c: 0 d: 7.5 e: 7.5 f: 7.5 g: [ 259 14 20 27 35 44 54 65 77 90] h: [[1 1 1] [1 1 1] [1 1 1]] i: (array([0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2], dtype=int64), array([0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3], dtype=int64)) j: [[ 2345] [ 6789] [10 11 12 13]] k: [[ 26 10] [ 37 11] [ 48 12] [ 59 13]] o: [[140 158 176 194] [158 179 200 221] [176 200 224 248] [194 221 248 275]] p: [[5 5 5 5] [6 7 8 9] [9 9 9 9]] '''

7、numpy的索引 数组的索引
import numpy as np a = np.arange(3,15).reshape((3,4))#定义一个值为2~14的数组,并改写成3行4列 b=a[1][2]#返回数组1行2列的值 c=a[1,2]#返回数组1行2列的值,与上面有相同的效果 d=a[1,1:3]#返回数组中第一行,数列中[1:3]的切片值print('a:',a) print('b:',b) print('c:',c) print('d:',d)''' 运行结果 a: [[ 3456] [ 789 10] [11 12 13 14]] b: 9 c: 9 d: [8 9] '''

遍历数组中的每一行
import numpy as np a = np.arange(3,15).reshape((3,4))#定义一个值为2~14的数组,并改写成3行4列 print('a:',a) print('____________________________________') for row in a:#遍历数组每一行,并打印 print(row) print('____________________________________') for column in a.T:#遍历数组每一列,并打印 print(column) print('____________________________________') for item in a.flat:#把a‘拍平’,然后再遍历每一项,然后打印 print(item) ''' 运行结果 a: [[ 3456] [ 789 10] [11 12 13 14]] ____________________________________ [3 4 5 6] [ 789 10] [11 12 13 14] ____________________________________ [ 37 11] [ 48 12] [ 59 13] [ 6 10 14] ____________________________________ 3 4 5 6 7 8 9 10 11 12 13 14 '''

8、numpy的 array 合并
import numpy as np a=np.array([1,1,1]) b=np.array([2,2,2]) c=np.vstack((a,b))#vertical stack 竖向合并,维度增加 d=np.hstack((a,b))#horizontal stack 横向合并,维度不变 e=a[np.newaxis,:]#在a的行上增加一个维度 f=a[:,np.newaxis]#在a的列上增加一个维度 A=np.array([1,1,1])[:,np.newaxis] B=np.array([2,2,2])[:,np.newaxis] g=np.concatenate((A,B,B,A),axis=0)#将(A,B,B,A)按行合并,将(A,B,B,A)中axis=0的值按顺序放在一起 h=np.concatenate((A,B,B,A),axis=1)#将(A,B,B,A)按列合并,将(A,B,B,A)中axis=1的值按顺序放在一起 print('a:',a) print('a.shape:',a.shape) print('____________________________________') print('b:',b) print('c:',c) print('d:',d) print('e:',e) print('e.shape:',e.shape) print('____________________________________') print('f:',f) print('f.shape:',f.shape) print('____________________________________') print('g:',g) print('____________________________________') print('h:',h) ''' 运行结果 a: [1 1 1] a.shape: (3,) ____________________________________ b: [2 2 2] c: [[1 1 1] [2 2 2]] d: [1 1 1 2 2 2] e: [[1 1 1]] e.shape: (1, 3) ____________________________________ f: [[1] [1] [1]] f.shape: (3, 1) ____________________________________ g: [[1] [1] [1] [2] [2] [2] [2] [2] [2] [1] [1] [1]] ____________________________________ h: [[1 2 2 1] [1 2 2 1] [1 2 2 1]] '''

9、numpy的 array 分隔
import numpy as np a=np.arange(12).reshape(3,4) b=np.split(a,2,axis=1)#将a按列分为2块,返回list对象 c=np.split(a,3,axis=0)#将a按行分为3块,返回list对象 d=np.array_split(a,3,axis=1)#将a按列分为2块,不等分,返回list对象 e=np.array_split(a,2,axis=0)#将a按行分为3块,不等分,返回list对象 f=np.vsplit(a,3)#将a按列等分,返回list对象 g=np.hsplit(a,2)#将a按行等分,返回list对象 print('a:',a) print('a.shape:',a.shape) print('____________________________________') print('b:',b) print('b是list对象,b[0].shape:',b[0].shape) print('____________________________________') print('c:',c) print('c是list对象,c[0].shape:',c[0].shape) print('____________________________________') print('d:',d) print('d是list对象,d[0].shape:',d[0].shape) print('____________________________________') print('e:',e) print('e是list对象,e[0].shape:',e[0].shape) print('____________________________________') print('f:',f) print('f是list对象,f[0].shape:',f[0].shape) print('____________________________________')''' 运行结果 a: [[ 0123] [ 4567] [ 89 10 11]] a.shape: (3, 4) ____________________________________ b: [array([[0, 1], [4, 5], [8, 9]]), array([[ 2,3], [ 6,7], [10, 11]])] b是list对象,b[0].shape: (3, 2) ____________________________________ c: [array([[0, 1, 2, 3]]), array([[4, 5, 6, 7]]), array([[ 8,9, 10, 11]])] c是list对象,c[0].shape: (1, 4) ____________________________________ d: [array([[0, 1], [4, 5], [8, 9]]), array([[ 2], [ 6], [10]]), array([[ 3], [ 7], [11]])] d是list对象,d[0].shape: (3, 2) ____________________________________ e: [array([[0, 1, 2, 3], [4, 5, 6, 7]]), array([[ 8,9, 10, 11]])] e是list对象,e[0].shape: (2, 4) ____________________________________ f: [array([[0, 1, 2, 3]]), array([[4, 5, 6, 7]]), array([[ 8,9, 10, 11]])] f是list对象,f[0].shape: (1, 4) ____________________________________ '''

10、numpy的 copy & deep copy 【Python|Python数据科学包-初识numpy】直接赋值是浅拷贝,使用copy方法是深拷贝
import numpy as np a=np.arange(4) print('a:',a) print('____________________________________') b=a c=a d=b a[0]=0.9#给a中元素替换成浮点数时,a不变 print('a:',a) print('____________________________________') a[0]=11#给a中元素替换成整数时,a的值改变 print('a:',a) print('____________________________________') print('b:',b)#b的值随之改变,说明把a赋值给b,a和b指向内存中同一个id print(a is b) print('____________________________________') print('d:',d)#d的值也随之改变,说明经过多次赋值,d和b指向内存中同一个id print(d is b) print('____________________________________') f=a.copy() print(id(f)) print(id(a)) print(f is b)#说明f是深拷贝,f和a指向内存中的不同id print('____________________________________')''' 运行结果 a: [0 1 2 3] ____________________________________ a: [0 1 2 3] ____________________________________ a: [11123] ____________________________________ b: [11123] True ____________________________________ d: [11123] True ____________________________________ 39419056 39418976 False ____________________________________ '''

    推荐阅读