数据分析2.1数组对象ndarray
1 # -*- coding: utf-8 -*- 2 3 ############################################################################### 4 ####################### 正文代码 ####################### 5 ############################################################################### 6 7 # 代码 2-1 8 import numpy as np #导入 NumPy 库 9 arr1 = np.array([1, 2, 3, 4]) #创建一维数组 10 print(' 创建的数组为: ',arr1) 11 12 # 创建二维数组 13 arr2 = np.array([[1, 2, 3, 4],[4, 5, 6, 7], [7, 8, 9, 10]]) 14 print('创建的数组为:\n',arr2) 15 16 print('数组类型为:',arr2.dtype) #查看数组类型 17 print('数组元素个数为:',arr2.size) #查看数组元素个数 18 print('数组每个元素大小为:',arr2.itemsize) #查看数组每个元素大小 19 20 21 # 代码 2-2 22 arr2.shape = 4,3 #重新设置shape 23 print('重新设置shape 后的arr2 为:',arr2) 24 25 # 代码 2-3 26 print('使用arange函数创建的数组为:\n',np.arange(0,1,0.1)) 27 28 # 代码 2-4 29 print('使用linspace函数创建的数组为:',np.linspace(0, 1, 12)) 30 31 # 代码 2-5 32 print('使用logspace函数创建的数组为:',np.logspace(0, 2, 20)) 33 34 # 代码 2-6 35 print('使用zeros函数创建的数组为:',np.zeros((2,3))) 36 37 # 代码 2-7 38 print('使用eye函数创建的数组为:',np.eye(3)) 39 40 # 代码 2-8 41 print('使用diag函数创建的数组为:',np.diag([1,2,3,4])) 42 43 # 代码 2-9 44 print('使用ones函数的数组为:',np.ones((5,3))) 45 46 # 代码 2-10 47 print('转换结果为:',np.float64(42)) #整型转换为浮点型 48 print('转换结果为:',np.int8(42.0)) #浮点型转换为整型 49 print('转换结果为:',np.bool(42)) #整型转换为布尔型 50 print('转换结果为:',np.bool(0)) #整型转换为布尔型 51 print('转换结果为:',np.float(True)) #布尔型转换为浮点型 52 print('转换结果为:',np.float(False)) #布尔型转换为浮点型 53 54 # 代码 2-11 55 df = np.dtype([("name", np.str_, 40), ("numitems", np.int64), 56 ("price",np.float64)]) 57 print('数据类型为:',df) 58 59 # 代码 2-12 60 print('数据类型为:',df["name"]) 61 print('数据类型为:',np.dtype(df["name"])) 62 63 # 代码 2-13 64 itemz = np.array([("tomatoes", 42, 4.14),("cabbages", 13, 1.72)], 65 dtype=df) 66 print('自定义数据为:',itemz) 67 68 # 代码 2-14 69 print('生成的随机数组为:',np.random.random(100)) 70 71 # 代码 2-15 72 print('生成的随机数组为:\n',np.random.rand(10,5)) 73 74 # 代码 2-16 75 print('生成的随机数组为:\n',np.random.randn(10,5)) 76 77 # 代码 2-17 78 print('生成的随机数组为:',np.random.randint(2,10,size = [2,5])) 79 80 # 代码 2-18 81 arr = np.arange(10) 82 print('索引结果为:',arr[5]) #用整数作为下标可以获取数组中的某个元素 83 #用范围作为下标获取数组的一个切片,包括arr[3]不包括arr[5] 84 print('索引结果为:',arr[3:5]) 85 print('索引结果为:',arr[:5]) #省略开始下标,表示从arr[0]开始 86 #下标可以使用负数,-1表示从数组后往前数的第一个元素 87 print('索引结果为:',arr[-1]) 88 89 arr[2:4] = 100,101 90 print('索引结果为:',arr) #下标还可以用来修改元素的值 91 #范围中的第三个参数表示步长,2表示隔一个元素取一个元素 92 print('索引结果为:',arr[1:-1:2]) 93 print('索引结果为:',arr[5:1:-2]) #步长为负数时,开始下标必须大于结束下标 94 95 # 代码 2-19 96 arr = np.array([[1, 2, 3, 4, 5],[4, 5, 6, 7, 8], [7, 8, 9, 10, 11]]) 97 print('创建的二维数组为:',arr) 98 print('索引结果为:',arr[0,3:5]) #索引第0行中第3和第4列的元素 99 #索引第2和第3行中第3列、第4列和第5列的元素 100 print('索引结果为:\n',arr[1:,2:]) 101 print('索引结果为:',arr[:,2]) #索引第2列的元素 102 103 # 代码 2-20 104 #从两个序列的对应位置取出两个整数组成下标:arr[0,1], arr[1,2], arr[2,3] 105 print('索引结果为:',arr[[(0,1,2),(1,2,3)]]) 106 print('索引结果为:',arr[1:,(0,2,3)]) #索引第2、3行中第0、2、3列的元素 107 108 mask = np.array([1,0,1],dtype = np.bool) 109 #mask是一个布尔数组,它索引第1、3行中第2列的元素 110 print('索引结果为:',arr[mask,2]) 111 112 113 # 代码 2-21 114 ''' 115 arr = np.arange(12) #创建一维数组 116 print('创建的一维数组为:',arr) 117 print('新的一维数组为:',arr.reshape(3,4)) #设置数组的形状 118 print('数组维度为:',arr.reshape(3,4).ndim) #查看数组维度 119 ''' 120 121 # 代码 2-22 122 arr = np.arange(12).reshape(3,4) 123 print('创建的二维数组为:',arr) 124 print('数组展平后为:',arr.ravel()) 125 126 # 代码 2-23 127 print('数组展平为:',arr.flatten()) #横向展平 128 print('数组展平为:',arr.flatten('F')) #纵向展平 129 130 # 代码 2-24 131 arr1 = np.arange(12).reshape(3,4) 132 print('创建的数组1为:',arr1) 133 134 arr2 = arr1*3 135 print('创建的数组2为:',arr2) 136 print('横向组合为:',np.hstack((arr1,arr2))) #hstack函数横向组合 137 138 # 代码 2-25 139 print('纵向组合为:',np.vstack((arr1,arr2))) #vstack函数纵向组合 140 141 # 代码 2-26 142 print('横向组合为:',np.concatenate((arr1,arr2),axis = 1)) #concatenate函数横向组合 143 print('纵向组合为:',np.concatenate((arr1,arr2),axis = 0)) #concatenate函数纵向组合 144 145 # 代码 2-27 146 arr = np.arange(16).reshape(4,4) 147 print('创建的二维数组为:',arr) 148 print('横向分割为:',np.hsplit(arr, 2)) #hsplit函数横向分割 149 150 # 代码 2-28 151 print('纵向分割为:',np.vsplit(arr, 2)) #vsplit函数纵向分割 152 153 # 代码 2-29 154 ''' 155 print('横向分割为:',np.split(arr, 2, axis=1)) #split函数横向分割 156 print('纵向分割为:',np.split(arr, 2, axis=0)) #split函数纵向分割 157 '''