python数据分析实战---Numpy科学计算工具
Numpy基本认识NumPy(Numerical Python) 是 Python 语言的一个扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。 NumPy 是一个运行速度非常快的数学库,主要用于数组计算,包含:
? Numpy基础数据结构NumPy 数组的维数称为秩(rank),一维数组的秩为 1,二维数组的秩为 2,以此类推。 在 NumPy中,每一个线性的数组称为是一个轴(axis),也就是维度(dimensions)。比如说,二维数组相当于是两个一维数组,其中第一个一维数组中每个元素又是一个一维数组。所以一维数组就是 NumPy 中的轴(axis),第一个轴相当于是底层数组,第二个轴是底层数组里的数组。而轴的数量——秩,就是数组的维数。 很多时候可以声明 axis。axis=0,表示沿着第 0 轴进行操作,即对每一列进行操作;axis=1,表示沿着第1轴进行操作,即对每一行进行操作。 NumPy 的数组中比较重要 ndarray 对象属性有:
? import numpy ar = numpy.array([[1,2,3,4,5],[2,5,6],[3,6,7]]) print(ar) print(ar.ndim) print(ar.shape) print(ar.size) print(ar.itemsize) print(ar.data) print(ar.dtype) print(ar.flags) print(ar.real) print(ar.imag) 结果: [[1 2 3 4 5] [2 3 4 5 6] [3 4 5 6 7]] 2 (3,5) 15 4 <memory at 0x00000000056EF748> int32 C_CONTIGUOUS : True F_CONTIGUOUS : False OWNDATA : True WRITEABLE : True ALIGNED : True WRITEBACKIFCOPY : False UPDATEIFCOPY : False [[1 2 3 4 5] [2 3 4 5 6] [3 4 5 6 7]] [[0 0 0 0 0] [0 0 0 0 0] [0 0 0 0 0]] 创建数组 array()函数? 括号内可以是list,元组、数组、生成器等 ar = np.array([[1,7]]) ar1 = np.array(range(10)) ar2 = np.array(10) ar3 = np.array([[1,[‘a‘,‘b‘,‘c‘,‘d‘]]) print(ar) print(ar1) print(ar2) print(ar3) 输入结果: [[1 2 3 4 5] [2 3 4 5 6] [3 4 5 6 7]] [0 1 2 3 4 5 6 7 8 9] 10 [list([1,5]) list([2,6]) list([‘a‘,‘d‘])] arange()函数? 类似于range(),在给定间隔内返回均匀间隔的值 print(np.arange(10)) print(np.arange(10.0)) print(np.arange(5,12)) print(np.arange(5.0,12.3)) 输入结果: [0 1 2 3 4 5 6 7 8 9] [0. 1. 2. 3. 4. 5. 6. 7. 8. 9.] [ 5 6 7 8 9 10 11] [ 5. 6. 7. 8. 9. 10. 11. 12.] print(numpy.linspace(5,14,num=10)) #返回在间隔【开始,停止】上计算的num个均匀间隔的样本 print(numpy.linspace(5,num=11)) print(numpy.zeros((4,4),dtype=numpy.int)) #创建指定大小的数组,数组元素以 0 来填充 ar = numpy.array([range(10),range(10,20)]) print(numpy.zeros_like(ar)) print(ar) print(numpy.ones((2,3),dtype=numpy.int)) #创建指定大小的数组,数组元素以 1 来填充 #ones_like()和zeros_like()相似 print(numpy.eye(3,dtype=numpy.int)) #创建一个正方的N+N的单位矩阵,对角线值位1,其余的值为0 输入结果: [ 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.] [ 5. 5.9 6.8 7.7 8.6 9.5 10.4 11.3 12.2 13.1 14. ] [[0 0 0 0] [0 0 0 0] [0 0 0 0] [0 0 0 0]] [[0 0 0 0 0 0 0 0 0 0] [0 0 0 0 0 0 0 0 0 0]] [[ 0 1 2 3 4 5 6 7 8 9] [10 11 12 13 14 15 16 17 18 19]] [[1 1 1] [1 1 1]] [[1 0 0] [0 1 0] [0 0 1]] Numpy通用函数翻转数组? ?numpy.T 修改数组形状? numpy.reshape 返回指定形态新数组? numpy.resize import numpy as np ar = np.arange(10) ar1 = np.zeros((2,4)) print(ar) print(ar1) print(ar.T) print(ar1.T) ar2 = np.arange(12) ar3 = np.arange(12).reshape(3,4) print(ar2) print(ar3) print(np.resize(ar3,(4,4))) 输出结果: [0 1 2 3 4 5 6 7 8 9] [[0. 0. 0. 0.] [0. 0. 0. 0.]] [0 1 2 3 4 5 6 7 8 9] [[0. 0.] [0. 0.] [0. 0.] [0. 0.]] [ 0 1 2 3 4 5 6 7 8 9 10 11] [[ 0 1 2 3] [ 4 5 6 7] [ 8 9 10 11]] [[ 0 1 2 3] [ 4 5 6 7] [ 8 9 10 11] [ 0 1 2 3]] 数组的复制 copy() ar = np.arange(10) print(ar) ar1 = ar ar1[2]=100 print(ar,ar1) ar3 = ar.copy() ar3[3]=998 print(ar,ar3) 输出结果: [0 1 2 3 4 5 6 7 8 9] [ 0 1 100 3 4 5 6 7 8 9] [ 0 1 100 3 4 5 6 7 8 9] [ 0 1 100 3 4 5 6 7 8 9] [ 0 1 100 998 4 5 6 7 8 9] 数组的字符转换 ar2 = numpy.array(range(16)).reshape(4,4) ar3 = ar2.astype(numpy.str) print(ar3) 输出结果: [[‘0‘ ‘1‘ ‘2‘ ‘3‘] [‘4‘ ‘5‘ ‘6‘ ‘7‘] [‘8‘ ‘9‘ ‘10‘ ‘11‘] [‘12‘ ‘13‘ ‘14‘ ‘15‘]] 连接数组 ar = np.array([[1,3],[4,6]]) ar1 = np.array([[7,8,9],[10,11,12]]) ar2 = np.stack((ar,ar1),0) #沿新轴连接数组序列 ar3 = np.hstack((ar,ar1))# 横向连接 ar4 = np.vstack((ar,ar1))#纵向连接 print(ar2,ar3,ar4) 输出结果: [[[ 1 2 3] [ 4 5 6]] [[ 7 8 9] [10 11 12]]] [[ 1 2 3 7 8 9] [ 4 5 6 10 11 12]] [[ 1 2 3] [ 4 5 6] [ 7 8 9] [10 11 12]] 分割数组 ar = np.arange(16).reshape(4,4) ar1 = np.vsplit(ar,2) #纵向拆分 ar2 = np.hsplit(ar,2) #横向拆分 print(ar) print(ar1) print(ar2) 输出结果: [[ 0 1 2 3] [ 4 5 6 7] [ 8 9 10 11] [12 13 14 15]] [array([[0,1,7]]),array([[ 8,9,10,11],[12,13,15]])] [array([[ 0,1],[ 4,[ 8,13]]),array([[ 2,[ 6,7],[14,15]])] 数组的计算 ar2 = numpy.array(range(16)).reshape(4,4) ar3 = ar2.astype(numpy.str) print(ar3) ar4 = ar2*10+100 print(ar4) print(ar4.mean()) #求平均值 print(ar4.sum()) #求总值 输出结果: [[‘0‘ ‘1‘ ‘2‘ ‘3‘] [‘4‘ ‘5‘ ‘6‘ ‘7‘] [‘8‘ ‘9‘ ‘10‘ ‘11‘] [‘12‘ ‘13‘ ‘14‘ ‘15‘]] [[100 110 120 130] [140 150 160 170] [180 190 200 210] [220 230 240 250]] 175.0 2800 ? Numpy索引和切片基本索引及切片 import numpy as np #一维数组索引 类似于list ar = np.arange(20) # print(ar[2]) # print(ar[3:5]) # print(ar[::2]) #二维数组以及多维数组的逻辑和一维的一样 ar1 = ar.reshape(4,5) # print(ar1) print(ar1[2][2]) print(ar1[2:4][0][2]) print(ar1[:2]) 输出结果: 12 12 [[0 1 2 3 4] [5 6 7 8 9]] 布尔型的索引及切片 ar = np.arange(12).reshape(3,4) print(ar) i = np.array([True,False,True]) j = np.array([True,True,False]) print(i) print(j) print(ar[i,:]) #在行中判断,只保留True的值 print(ar[:,j]) #在第二维度中判断,只保留True的值 print(ar[ar>5]) #生成一个新的数组 输出结果: [[ 0 1 2 3] [ 4 5 6 7] [ 8 9 10 11]] [ True False True] [ True False True False] [[ 0 1 2 3] [ 8 9 10 11]] [[ 0 2] [ 4 6] [ 8 10]] [ 6 7 8 9 10 11] Numpy随机数print(np.random.normal(size=(4,4))) #随机数生成 print(np.random.rand(4)) #生成一个【0-1】之间的随机浮点数或者是N维数组 ---均匀分布 print(np.random.rand(2,4)) print(np.random.randn(4)) #生成一个【0-1】之间的随机浮点数或者是N维数组 ---正态分布 print(np.random.randn(2,4)) print(np.random.randint(5)) #生成一个整数或者N维整数数组 print(np.random.randint(10,50,size=(4,4))) Nmupy数据输入和输出ar = numpy.random.randint(0,100,size=(10,10)) numpy.savetxt("savetxt.txt",ar,delimiter=",",fmt="%i") #数据的输出 txt_load = numpy.loadtxt("savetxt.txt",delimiter=‘,‘) #数据的输入 print(txt_load) # print(ar) ? 相关链接:
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |