简单学习了一下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