forked from xianhu/LearnPython
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathpython_numpy.py
More file actions
150 lines (113 loc) · 3.86 KB
/
python_numpy.py
File metadata and controls
150 lines (113 loc) · 3.86 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
# _*_coding:utf-8-*_
import numpy as np
# 定义矩阵变量并输出变量的一些属性
# 用np.array()生成矩阵
arr=np.array([[1,2,3],
[4,5,6]])
print(arr)
print('number of arr dimensions: ',arr.ndim)
print('~ ~ ~ shape: ',arr.shape)
print('~ ~ ~ size: ', arr.size)
# 输出结果:
[[1 2 3]
[4 5 6]]
number of arr dimensions: 2
~ ~ ~ shape: (2, 3)
~ ~ ~ size: 6
# 定义一些特殊矩阵
# 指定矩阵数据类型
arr=np.array([[1,2,3],
[4,5,6]],
dtype=np.float64) # 我的电脑np.int是int32,还可以使用np.int32/np.int64/np.float32/np.float64
print(arr.dtype)
# 用np.zeros()生成全零矩阵
arr_zeros=np.zeros( (2,3) )
print(arr_zeros)
# 用np.ones()生成全一矩阵
arr_ones=np.ones( (2,3) )
print(arr_ones)
# 生成随机矩阵np.random.random()
arr_random=np.random.random((2,3))
print(arr_random)
# 用np.arange()生成数列
arr=np.arange(6,12)
print(arr)
# 用np.arange().reshape()将数列转成矩阵
arr=np.arange(6,12).reshape( (2,3) )
print(arr)
# 用np.linspace(开始,结束,多少点划分线段),同样也可以用reshape()
arr=np.linspace(1,5,3)
print(arr)
# 矩阵运算
arr1=np.array([1,2,3,6])
arr2=np.arange(4)
# 矩阵减法,加法同理
arr_sub=arr1-arr2
print(arr1)
print(arr2)
print(arr_sub)
# 矩阵乘法
arr_multi=arr1**3 # 求每个元素的立方,在python中幂运算用**来表示
print(arr_multi)
arr_multi=arr1*arr2 # 元素逐个相乘
print(arr_multi)
arr_multi=np.dot(arr1, arr2.reshape((4,1))) # 维度1*4和4*1矩阵相乘
print(arr_multi)
arr_multi=np.dot(arr1.reshape((4,1)), arr2.reshape((1,4))) # 维度4*1和1*4矩阵相乘
print(arr_multi)
arr_multi=arr1.dot(arr2.reshape((4,1))) # 也可以使用矩阵名.doc(矩阵名)
print(arr_multi)
# 三角运算:np.sin()/np.cos()/np.tan()
arr_sin=np.sin(arr1)
print(arr_sin)
# 逻辑运算
print(arr1<3) # 查看arr1矩阵中哪些元素小于3,返回[ True True False False]
# 矩阵求和,求矩阵最大最小值
arr1=np.array([[1,2,3],
[4,5,6]])
print(arr1)
print(np.sum(arr1)) # 矩阵求和
print(np.sum(arr1,axis=0)) # 矩阵每列求和
print(np.sum(arr1,axis=1).reshape(2,1)) # 矩阵每行求和
print(np.min(arr1)) # 求矩阵最小值
print(np.min(arr1,axis=0))
print(np.min(arr1,axis=1))
print(np.max(arr1)) # 求矩阵最大值
print(np.mean(arr1)) # 输出矩阵平均值,也可以用arr1.mean()
print(np.median(arr1)) # 输出矩阵中位数
# 输出矩阵某些值的位置
arr1=np.arange(2,14).reshape((3,4))
print(arr1)
print(np.argmin(arr1)) # 输出矩阵最小值的位置,0
print(np.argmax(arr1)) # 输出矩阵最大值的位置,11
print(np.cumsum(arr1)) # 输出前一个数的和,前两个数的和,等等
print(np.diff(arr1)) # 输出相邻两个数的差值
arr_zeros=np.zeros((3,4))
print(np.nonzero(arr_zeros)) #输出矩阵非零元素位置,返回多个行向量,第i个行向量表示第i个维度
print(np.nonzero(arr1))
print(np.sort(arr1)) # 矩阵逐行排序
print(np.transpose(arr1)) # 矩阵转置,也可以用arr1.T
print(np.clip(arr1,5,9)) #将矩阵中小于5的数置5,大于9的数置9
# numpy索引
arr1=np.array([1,2,3,6])
arr2=np.arange(2,8).reshape(2,3)
print(arr1)
print(arr1[0]) # 索引从0开始计数
print(arr2)
print(arr2[0][2]) # arr[行][列],也可以用arr[行,列]
print(arr2[0,:]) # 用:来代表所有元素的意思
print(arr2[0,0:3]) # 表示输出第0行,从第0列到第2列所有元素
# 注意python索引一般是左闭右开
# 通过for循环每次输出矩阵的一行
for row in arr2:
print(row)
# 如果要每次输出矩阵的一列,就先将矩阵转置
arr2_T=arr2.T
print(arr2_T)
for row in arr2_T:
print(row)
# 将矩阵压成一行逐个输出元素
arr2_flat=arr2.flatten()
print(arr2_flat)
for i in arr2.flat: # 也可以用arr2.flatten()
print(i)