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("
二维数组创建:arr2 = 
", 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("
重置维度后的数组为:arr2_reshape = 
", 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("
等差数组: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("
特殊等差数组: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("
10^等比数组: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("
全0数组:arr6 = 
", 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("
单位对角数组:arr7 = 
", 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("
对角数组:arr8 = 
", 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("
单位数组:arr9 = 
", 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("
自定义数据类型数组:arr10 = 
", 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("
随机数组:arr11 = 
", 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("
服从均匀分布随机数组:arr12 = 
", 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("
服从正态分布随机数组:arr13 = 
", 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("
给定上下限的随机数组:arr14 = 
", 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("
新的数组形态为:
", array1)
 8 ndim = arr1.reshape(3, 4).ndim
 9 print("
数组维度:", 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("
数组(横向)展平ravel(): ", arr2_ravel)
24 print("
数组(横向)展平flatten(): ", arr2_flatten)
25 print("
数组(纵向)展平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("
乘法计算:
", 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("
arr2与arr3横向组合:
", arr_hstack)
47 print("
arr2与arr3纵向组合:
", arr_vstack)
48 ''' 功能同上
49 arr_hstack = np.concatenate((arr2, arr3), axis=1) #横向组合
50 arr_vstack = np.concatenate((arr2, arr3), axis=0) #纵向组合
51 print("
arr2与arr3横向组合:
", arr_hstack)
52 print("
arr2与arr3纵向组合:
", 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("
arr4=
", 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("
横向分割:
", arr_hsplit)
75 print("
纵向分割:
", 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("
arr1=
", arr1, "
arr2=
", arr2, "
arr3=
", arr3)
 9 arr1.sort(axis=1)
10 print("
横向排序 arr1 =
", arr1)
11 print("
arr2=
", arr2)
12 arr2.sort(axis=0)
13 print("
纵向排序 arr2 =
", arr2)
14 print("
arr3=
", arr3)
15 print("
排序下标(按行给出):
", arr3.argsort())
16 print("
arr4=", arr4)
17 print("
去重:", np.unique(arr4))
18 print("
重复:", np.tile(arr4, 2))
19 print("
按行重复:
", arr1.repeat(2, axis=1))
20 print("
按列重复:
", 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("
arr1=
", 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(" 求和:", arr_sum) 19 print(" 纵向求和:", arr_sum0) 20 print(" 横向求和:", arr_sum1) 21 print(" 均值:",arr_mean) 22 print(" 纵向均值:", arr_mean0) 23 print(" 横向均值:", arr_mean1) 24 print(" 标准差:", arr_std) 25 print(" 方差:", arr_var) 26 print(" 最小值:", arr_min) 27 print(" 最大值:", arr_max) 28 print(" 最小值索引:", arr_argmin) 29 print(" 最大值索引:", 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 '''

(6)数组运算

 1 # !usr/bin/env python
 2 # Author:@vilicute
 3 
 4 # ufunc函数,针对数组所有元素进行操作,效率高
 5 
 6 import numpy as np
 7 
 8 arr1 = np.array([9,6,3])
 9 arr2 = np.array([2,5,6])
10 arr3 = np.array([[1,1,1,],[2,2,2],[3,3,3],[4,4,4]])
11 arr4 = np.array([[4],[5],[6],[7]])
12 
13 print("相加:",arr1+arr2)
14 print("相减:",arr1-arr2)
15 print("相乘:",arr1*arr2)
16 print("相除:",arr1/arr2)
17 print("幂运算:",arr1**arr2)
18 
19 print("比较运算:",arr1<arr2)   # >  <=  >=  ==  !=
20 print("逻辑and 和 or:",np.all(arr1 == arr2),np.any(arr1 == arr2))
21 print("
一维广播机制相加:
",arr1+arr3)
22 print("
二维广播机制相加:
",arr4+arr3)
23 
24 '''
25 相加: [11 11  9]
26 相减: [ 7  1 -3]
27 相乘: [18 30 18]
28 相除: [4.5 1.2 0.5]
29 幂运算: [  81 7776  729]
30 比较运算: [False False  True]
31 逻辑and 和 or: False False
32 一维广播机制相加:
33  [[10  7  4]
34  [11  8  5]
35  [12  9  6]
36  [13 10  7]]
37 二维广播机制相加:
38  [[ 5  5  5]
39  [ 7  7  7]
40  [ 9  9  9]
41  [11 11 11]]
42 '''
原文地址:https://www.cnblogs.com/vilicute/p/11605376.html