简单学习了一下NumPy库的基础知识,对数组的一些运算操作。
1.认识ndarray对象
2.数组运算方式
3.数组索引和切片
4.使用数组进行数据处理
1 """numpy库的基础""" 2 import numpy as np 3 data = np.arange(12).reshape(3, 4) # 创建一个3行4列的数组 4 5 print(data) 6 7 print(data.ndim) # 输出数组的维度 8 print(data.size) # 数组元素的个数 9 print(data.dtype) # 数组元素的类型,元素类型均为int32 10 print() 11 12 data1 = np.array([1, 2, 3]) # 创建一个一维数组 13 print(data1) 14 print() 15 16 data2 = np.array([[1, 2, 3], [4, 5, 6]]) # 创建一个二维数组 17 print(data2) 18 print(np.arange(6).reshape(1, 2, 3)) 19 print() 20 21 # 索引和切片,数组索引与列表差不多。注意行列! 22 # 花式索引基本使用 23 demo_arr = np.empty((4, 4), dtype=int) 24 for i in range(4): 25 demo_arr[i] = np.arange(i, i+4) 26 print(demo_arr) 27 print() 28 29 print(demo_arr[[0, 2]]) 30 print(demo_arr[[1, 3], [1, 2]]) 31 print(demo_arr[:2, 2:]) 32 33 print(np.zeros((3, 4))) # zeros方法可以直接创建元素值都为0的数组 34 print(np.ones((4, 4))) # ones方法可以创建元素值都为1的数组 35 print(np.empty((5, 2))) # empty方法创建的数组只分配了内存空间,内部元素均为随机,且类型默认为float64 36 print(np.arange(1, 50, 3)) # arange方法可以创建一个一维等差数组,(头,尾,差) 37 print(np.zeros((3, 4), float)) # 可在创建数组的同时制定其元素的类型 38 print() 39 40 print(data1+data2) # 数组相加 41 print(data1-data2) # 数组相减 42 print(data1*data2) # 数组相乘 43 print(data1/data2) # 数组相除 44 print() 45 46 # 数组的转置 47 arr = np.arange(12).reshape(3, 4) 48 arr1 = np.arange(6).reshape(1, 2, 3) 49 print(arr) 50 print(arr1) 51 print() 52 print(arr.T) 53 print(arr1.T) # 数组的转置 54 print(arr1.transpose(1, 0, 2)) 55 print(arr1.transpose(2, 0, 1)) # 三维数组的轴变换 56 print() 57 58 arr2 = np.array([4, 9, 16]) 59 print(np.sqrt(arr2)) # 数组元素的平方根 60 print(np.abs(arr2)) # 数组元素的绝对值 61 print(np.square(arr2)) # 数组元素的平方
1 """numpy库的练习:蚂蚁随机走了2000步,向前走为1,向后走为-1,计算最终行走的点到起点的距离总和。""" 2 import numpy as np 3 4 steps = 2000 5 draws = np.random.randint(0, 2, size=steps) 6 direction_steps = np.where(draws > 0, 1, -1) 7 # 生成的随机数在0,1之间,draws=0时,向后走,draws=1时,向前走 8 distance = direction_steps.cumsum() # 步数距离累计总和 9 10 print("行走最大的距离:%d" % distance.max()) 11 print("行走最小的距离:%d" % distance.min()) 12 13 steps = 15/0.5 # 当行走距离大于等于15m时开始计算步数 14 print("行走的最大距离的步数:%d" % (np.abs(distance) >= steps).argmax()) 15 16 """绘制国际象棋8*8棋盘,其中白色为1,黑色为0""" 17 18 arr1 = np.empty((8, 8), dtype=int) 19 for i in range(8): 20 for j in range(8): 21 if i % 2 == 0 | j % 2 == 0: # i为偶数 j为偶数 棋盘数为1 22 arr1[i][j] = 1 23 elif i % 2 != 0 | j % 2 == 0: # i为奇数 j为偶数 棋盘数为0 24 arr1[i][j] = 0 25 elif i % 2 == 0 | j % 2 != 0: # i为偶数 j为奇数 棋盘数为1 26 arr1[i][j] = 1 27 else: # 剩下位置为0 28 arr1[i][j] = 0 29 print(arr1)
数组运算:矢量化运算中,当形状不相等的数组执行算术运算时,会出现广播机制。*该机制会对数组进行扩展,使数组的shape属性值一样,这样方可进行矢量化运算。
NumPy的where()函数是三元表达式x if condition else y 的矢量化版本。简称为矢量化三元表达式。
线性代数模块、随机数模块部分未添加。
C_8学习记录 2019.05.07