2-1 Numpy-数组

时间:2019-09-28
本文章向大家介绍2-1 Numpy-数组,主要包括2-1 Numpy-数组使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

(1) 数组的创建
  1 # !usr/bin/env python
  2 # Author:@vilicute
  3 import numpy as np
  4 # 1、用array创建数组并查看数组的属性
  5 arr1 = np.array([1, 2, 3, 4])  # 一维数组
  6 print("一维数组创建:arr1 = ", arr1)
  7 arr2 = np.array([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]])  # 二维数组
  8 print("\n二维数组创建:arr2 = \n", arr2)
  9 # 数组属性
 10 print("数组维数:", arr2.ndim)
 11 print("数组维度:", arr2.shape)
 12 print("数组类型:", arr2.dtype)
 13 print("元素个数:", arr2.size)
 14 print("元素大小:", arr2.itemsize)
 15 arr2.shape = 4, 3  # 重新设置维度属性
 16 print("\n重置维度后的数组为:arr2_reshape = \n", arr2)
 17 '''
 18 一维数组创建:arr1 =  [1 2 3 4]
 19 二维数组创建:arr2 = 
 20  [[ 1  2  3  4]
 21  [ 5  6  7  8]
 22  [ 9 10 11 12]]
 23 数组维数: 2
 24 数组维度: (3, 4)
 25 数组类型: int32
 26 元素个数: 12
 27 元素大小: 4
 28 重置维度后的数组为:arr2_reshape = 
 29  [[ 1  2  3]
 30  [ 4  5  6]
 31  [ 7  8  9]
 32  [10 11 12]]
 33  '''
 34  
 35 # 2、用arange创建数组
 36 arr3 = np.arange(0, 1, 0.1)  # (初值,终值,间隔)  左闭右开
 37 print("\n等差数组:arr3 = ", arr3)
 38 '''
 39 等差数组:arr3 =  [0.  0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9]
 40 '''
 41 # 3、用linspace创建数组
 42 arr4 = np.linspace(0, 1, 4)  # (初值,终值,个数)  等差数列
 43 print("\n特殊等差数组:arr4 = ", arr4)
 44 '''
 45 特殊等差数组:arr4 =  [0.         0.33333333 0.66666667 1.        ]
 46 '''
 47 # 4、用logspace创建数组
 48 arr5 = np.logspace(0, 2, 4)  # (10^0,10^2,个数)  等比数列
 49 print("\n10^等比数组:arr5 = ", arr5)
 50 '''
 51 10^等比数组:arr5 =  [  1.           4.64158883  21.5443469  100.        ]
 52 '''
 53 # 5、用zeros创建数组
 54 arr6 = np.zeros((3, 3))  # (a,b) 维数
 55 print("\n全0数组:arr6 = \n", arr6)
 56 '''
 57 全0数组:arr6 = 
 58  [[0. 0. 0.]
 59   [0. 0. 0.]
 60   [0. 0. 0.]]
 61 '''
 62 # 6、用eye创建数组
 63 arr7 = np.eye(3)  # 类似于单位矩阵
 64 print("\n单位对角数组:arr7 = \n", arr7)
 65 '''
 66 单位对角数组:arr7 = 
 67  [[1. 0. 0.]
 68   [0. 1. 0.]
 69   [0. 0. 1.]]
 70 '''
 71 # 7、用diag创建数组
 72 arr8 = np.diag([1, 2, 3, 4])  # [a,b,c,d] 对角元素
 73 print("\n对角数组:arr8 = \n", arr8)
 74 '''
 75 对角数组:arr8 = 
 76  [[1 0 0 0]
 77   [0 2 0 0]
 78   [0 0 3 0]
 79   [0 0 0 4]]
 80 '''
 81 # 8、用ones创建数组
 82 arr9 = np.ones((4, 3))  # (a,b) 维数
 83 print("\n单位数组:arr9 = \n", arr9)
 84 '''
 85 单位数组:arr9 = 
 86  [[1. 1. 1.]
 87   [1. 1. 1.]
 88   [1. 1. 1.]
 89   [1. 1. 1.]]
 90 '''
 91 # 9、自定义数据数组创建
 92 arr10 = np.array([("vilicute", 52, 5.02), ("shame", 55, 55.02)])
 93 print("\n自定义数据类型数组:arr10 = \n", arr10)
 94 '''
 95 自定义数据类型数组:arr10 = 
 96  [['vilicute' '52' '5.02']
 97   ['shame' '55' '55.02']]
 98 '''
 99 # 10、生成随机数组
100 arr11 = np.random.random(10)  # 个数
101 print("\n随机数组:arr11 = \n", arr11)
102 '''
103 随机数组:arr11 = 
104  [0.10325528 0.58512919 0.44988683 0.49719158 0.6361162  0.08344581 0.00998028 0.85750635 0.37264001 0.94651211]
105 '''
106 # 11、生成服从均匀分布随机数
107 arr12 = np.random.rand(4, 3)
108 print("\n服从均匀分布随机数组:arr12 = \n", arr12)
109 '''
110 服从均匀分布随机数组:arr12 = 
111  [[0.85982146 0.31343986 0.89078588]
112   [0.15717079 0.04499381 0.32277901]
113   [0.70737793 0.75456669 0.43207658]
114   [0.73633332 0.05820537 0.73123502]]
115 '''
116 # 12、生成服从正态分布随机数
117 arr13 = np.random.randn(4, 3)
118 print("\n服从正态分布随机数组:arr13 = \n", arr13)
119 '''
120 服从正态分布随机数组:arr13 = 
121  [[ 0.36057176 -0.71389648 -0.26165942]
122   [ 1.38415272  0.90255961 -1.42104002]
123   [ 0.48616978  1.22208226  0.65215556]
124   [ 0.2997037   1.31383623 -0.10306966]]
125 '''
126 # 13、生成给定上下限的随机数组
127 arr14 = np.random.randint(2, 10, size=[2, 5])   # size 维数
128 print("\n给定上下限的随机数组:arr14 = \n", arr14)
129 '''
130 给定上下限的随机数组:arr14 = 
131  [[2 8 4 4 7]
132   [3 7 5 6 5]]
133 '''
(2)数组的访问
 1 # !usr/bin/env python
 2 # Author:@vilicute
 3 import numpy as np
 4 ar = np.random.randint(0,10,size = [4,5])
 5 print(ar)
 6 print(ar[1,3])    # 第二行第四列
 7 print(ar[0,2:4])  # 0行的3,4列元素
 8 print(ar[1:,2:])  # 1行2列之后的元素
 9 print(ar[:,2])    # 第3列元素
10 print(ar[2,:])    # 第3行元素
11 '''
12 [[6 0 3 8 9]
13  [8 7 4 8 2]
14  [0 0 1 7 2]
15  [8 2 0 8 7]]
16  
17 8
18 [3 8]
19 [[4 8 2]
20  [1 7 2]
21  [0 8 7]]
22  
23 [3 4 1 0]
24 [0 0 1 7 2]
25 '''
(3)数组形态的变换
 1 # !usr/bin/env python
 2 # Author:@vilicute
 3 import numpy as np
 4 arr1 = np.arange(12)
 5 print(arr1)
 6 array1 = arr1.reshape(3, 4)
 7 print("\n新的数组形态为:\n", array1)
 8 ndim = arr1.reshape(3, 4).ndim
 9 print("\n数组维度:", ndim)
10 '''
11 [ 0  1  2  3  4  5  6  7  8  9 10 11]
12 新的数组形态为:
13  [[ 0  1  2  3]
14  [ 4  5  6  7]
15  [ 8  9 10 11]]
16 数组维度: 2
17 '''
18 arr2 = np.random.randint(5, 15, size=[4, 5])
19 print(arr2)
20 arr2_ravel = arr2.ravel()          #数组(横向)展平
21 arr2_flatten = arr2.flatten()      #数组(横向)展平
22 arr2_flatten_F = arr2.flatten('F') #数组(纵向)展平
23 print("\n数组(横向)展平ravel(): ", arr2_ravel)
24 print("\n数组(横向)展平flatten(): ", arr2_flatten)
25 print("\n数组(纵向)展平flatten(): ", arr2_flatten_F)
26 '''
27 [[12  5  6  8 10]
28  [11 11  8 11  7]
29  [13  7  5  5 11]
30  [ 8  6 11 13  6]]
31 数组(横向)展平ravel(): [12  5  6  8 10 11 11  8 11  7 13  7  5  5 11  8  6 11 13  6]
32 数组(横向)展平flatten(): [12  5  6  8 10 11 11  8 11  7 13  7  5  5 11  8  6 11 13  6]
33 数组(纵向)展平flatten(): [12 11 13  8  5 11  7  6  6  8  5 11  8 11  5 13 10  7 11  6]
34 '''
35 arr3 = arr2*2
36 print("\n乘法计算:\n", arr3)
37 '''
38 乘法计算:
39  [[24 10 12 16 20]
40   [22 22 16 22 14]
41   [26 14 10 10 22]
42   [16 12 22 26 12]]
43 '''
44 arr_hstack = np.hstack((arr2, arr3)) #横向组合
45 arr_vstack = np.vstack((arr2, arr3)) #纵向组合
46 print("\narr2与arr3横向组合:\n", arr_hstack)
47 print("\narr2与arr3纵向组合:\n", arr_vstack)
48 ''' 功能同上
49 arr_hstack = np.concatenate((arr2, arr3), axis=1) #横向组合
50 arr_vstack = np.concatenate((arr2, arr3), axis=0) #纵向组合
51 print("\narr2与arr3横向组合:\n", arr_hstack)
52 print("\narr2与arr3纵向组合:\n", arr_vstack)
53 '''
54 '''
55 arr2与arr3横向组合:
56  [[12  5  6  8 10 24 10 12 16 20]
57   [11 11  8 11  7 22 22 16 22 14]
58   [13  7  5  5 11 26 14 10 10 22]
59   [ 8  6 11 13  6 16 12 22 26 12]]
60 arr2与arr3纵向组合:
61  [[12  5  6  8 10]
62   [11 11  8 11  7]
63   [13  7  5  5 11]
64   [ 8  6 11 13  6]
65   [24 10 12 16 20]
66   [22 22 16 22 14]
67   [26 14 10 10 22]
68   [16 12 22 26 12]]
69 '''
70 arr4 = np.arange(16).reshape(4, 4)
71 print("\narr4=\n", arr4)
72 arr_hsplit = np.hsplit(arr4, 2) #横向分割, <=>np.split(arr4,2,axis = 1)
73 arr_vsplit = np.vsplit(arr4, 2) #纵向分割, <=>np.split(arr4,2,axis = 0)
74 print("\n横向分割:\n", arr_hsplit)
75 print("\n纵向分割:\n", arr_vsplit)
76 '''
77 arr4=
78  [[ 0  1  2  3]
79  [ 4  5  6  7]
80  [ 8  9 10 11]
81  [12 13 14 15]]
82 横向分割:
83  [array([[ 0,  1],
84          [ 4,  5],
85          [ 8,  9],
86          [12, 13]]), 
87   array([[ 2,  3],
88          [ 6,  7],
89          [10, 11],
90          [14, 15]])]
91 纵向分割:
92  [array([[0, 1, 2, 3],
93          [4, 5, 6, 7]]), 
94   array([[ 8,  9, 10, 11],
95          [12, 13, 14, 15]])]
96 '''
(4)数组排序
 1 # !usr/bin/env python
 2 # Author:@vilicute
 3 import numpy as np
 4 arr1 = np.random.randint(10, 100, size=[4, 5])
 5 arr2 = np.random.randint(10, 100, size=[4, 4])
 6 arr3 = np.random.randint(10, 100, size=[4, 3])
 7 arr4 = np.array(['小明', '小小', '小红', '小明', '小米', '小迭'])
 8 print("\narr1=\n", arr1, "\narr2=\n", arr2, "\narr3=\n", arr3)
 9 arr1.sort(axis=1)
10 print("\n横向排序 arr1 =\n", arr1)
11 print("\narr2=\n", arr2)
12 arr2.sort(axis=0)
13 print("\n纵向排序 arr2 =\n", arr2)
14 print("\narr3=\n", arr3)
15 print("\n排序下标(按行给出):\n", arr3.argsort())
16 print("\narr4=", arr4)
17 print("\n去重:", np.unique(arr4))
18 print("\n重复:", np.tile(arr4, 2))
19 print("\n按行重复:\n", arr1.repeat(2, axis=1))
20 print("\n按列重复:\n", arr1.repeat(2, axis=0))
21 '''
22 arr1=
23  [[24 11 78 47 65]
24  [81 54 56 90 45]
25  [75 61 50 22 23]
26  [77 64 63 84 69]] 
27 arr2=
28  [[12 23 37 32]
29  [41 20 58 77]
30  [43 76 42 97]
31  [77 53 28 90]] 
32 arr3=
33  [[53 33 81]
34  [77 22 63]
35  [90 20 66]
36  [28 61 38]]
37 横向排序 arr1 =
38  [[11 24 47 65 78]
39  [45 54 56 81 90]
40  [22 23 50 61 75]
41  [63 64 69 77 84]]
42 arr2=
43  [[12 23 37 32]
44  [41 20 58 77]
45  [43 76 42 97]
46  [77 53 28 90]]
47 纵向排序 arr2 =
48  [[12 20 28 32]
49  [41 23 37 77]
50  [43 53 42 90]
51  [77 76 58 97]]
52 arr3=
53  [[53 33 81]
54  [77 22 63]
55  [90 20 66]
56  [28 61 38]]
57 排序下标(按行给出):
58  [[1 0 2]
59  [1 2 0]
60  [1 2 0]
61  [0 2 1]]
62 arr4= ['小明' '小小' '小红' '小明' '小米' '小迭']
63 去重: ['小小' '小明' '小米' '小红' '小迭']
64 重复: ['小明' '小小' '小红' '小明' '小米' '小迭' '小明' '小小' '小红' '小明' '小米' '小迭']
65 按行重复:
66  [[11 11 24 24 47 47 65 65 78 78]
67  [45 45 54 54 56 56 81 81 90 90]
68  [22 22 23 23 50 50 61 61 75 75]
69  [63 63 64 64 69 69 77 77 84 84]]
70 按列重复:
71  [[11 24 47 65 78]
72  [11 24 47 65 78]
73  [45 54 56 81 90]
74  [45 54 56 81 90]
75  [22 23 50 61 75]
76  [22 23 50 61 75]
77  [63 64 69 77 84]
78  [63 64 69 77 84]]
79 '''
(5)数组统计
 1 # !usr/bin/env python
 2 # Author:@vilicute
 3 import numpy as np
 4 arr1 = np.random.randint(10, 100, size=[4, 5])
 5 print("\narr1=\n", arr1)
 6 arr_sum = np.sum(arr1) #求和
 7 arr_sum0 = arr1.sum(axis=0) #纵向求和
 8 arr_sum1 = arr1.sum(axis=1) #横向求和
 9 arr_mean = np.mean(arr1) #均值
10 arr_mean0 = arr1.mean(axis=0) #纵向均值
11 arr_mean1 = arr1.mean(axis=1) #横向均值
12 arr_std = np.std(arr1) #标准差
13 arr_var = np.var(arr1) #方差
14 arr_min = np.min(arr1) #最小值
15 arr_max = np.max(arr1) #最大值
16 arr_argmin = np.argmin(arr1) #最小值索引
17 arr_argmax = np.argmax(arr1) #最大值索引
18 print("\n求和:", arr_sum) 19 print("\n纵向求和:", arr_sum0) 20 print("\n横向求和:", arr_sum1) 21 print("\n均值:",arr_mean) 22 print("\n纵向均值:", arr_mean0) 23 print("\n横向均值:", arr_mean1) 24 print("\n标准差:", arr_std) 25 print("\n方差:", arr_var) 26 print("\n最小值:", arr_min) 27 print("\n最大值:", arr_max) 28 print("\n最小值索引:", arr_argmin) 29 print("\n最大值索引:", arr_argmax)
30 ''' 31 arr1= 32 [[28 54 50 40 75] 33 [93 26 95 81 41] 34 [12 43 73 49 82] 35 [27 26 26 13 37]] 36 求和: 971 37 纵向求和: [160 149 244 183 235] 38 横向求和: [247 336 259 129] 39 均值: 48.55 40 纵向均值: [40.00 37.25 61.00 45.75 58.75] 41 横向均值: [49.4 67.2 51.8 25.8] 42 标准差: 25.437128375663793 43 方差: 647.0475000000001 44 最小值: 12 45 最大值: 95 46 最小值索引: 10 47 最大值索引: 7 48 '''

原文地址:https://www.cnblogs.com/vilicute/p/11605376.html