gpt4 book ai didi

python中numpy的矩阵、多维数组的用法

转载 作者:qq735679552 更新时间:2022-09-28 22:32:09 29 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章python中numpy的矩阵、多维数组的用法由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

1. 引言 。

最近在将一个算法由matlab转成python,初学python,很多地方还不熟悉,总体感觉就是上手容易,实际上很优雅地用python还是蛮难的。目前为止,觉得就算法仿真研究而言,还是matlab用得特别舒服,可能是比较熟悉的缘故吧。matlab直接集成了很多算法工具箱,函数查询、调用、变量查询等非常方便,或许以后用久了python也会感觉很好用。与python相比,最喜欢的莫过于可以直接选中某段代码执行了,操作方便,python也可以实现,就是感觉不是很方便.

言归正传,做算法要用到很多的向量和矩阵运算操作,这些嘛在matlab里面已经很熟悉了,但用python的时候需要用一个查一个,挺烦的,所以在此稍作总结,后续使用过程中会根据使用体验更新.

python的矩阵运算主要依赖numpy包,scipy包以numpy为基础,大大扩展了后者的运算能力.

2. 创建一般的多维数组 。

?
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
import numpy as np
 
a = np.array([ 1 , 2 , 3 ], dtype = int ) # 创建1*3维数组 array([1,2,3])
 
type (a) # numpy.ndarray类型
 
a.shape # 维数信息(3L,)
 
a.dtype.name # 'int32'
 
a.size # 元素个数:3
 
a.itemsize #每个元素所占用的字节数目:4
 
b = np.array([[ 1 , 2 , 3 ],[ 4 , 5 , 6 ]],dtype = int ) # 创建2*3维数组 array([[1,2,3],[4,5,6]])
 
b.shape # 维数信息(2L,3L)
 
b.size # 元素个数:6
 
b.itemsize # 每个元素所占用的字节数目:4
 
 
c = np.array([[ 1 , 2 , 3 ],[ 4 , 5 , 6 ]],dtype = 'int16' ) # 创建2*3维数组 array([[1,2,3],[4,5,6]],dtype=int16)
 
c.shape # 维数信息(2L,3L)
 
c.size # 元素个数:6
 
c.itemsize # 每个元素所占用的字节数目:2
 
c.ndim # 维数
 
 
d = np.array([[ 1 , 2 , 3 ],[ 4 , 5 , 6 ]],dtype = complex ) # 复数二维数组
 
d.itemsize # 每个元素所占用的字节数目:16
 
d.dtype.name # 元素类型:'complex128'

3. 创建特殊类型的多维数组  。

?
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
a1 = np.zeros(( 3 , 4 )) # 创建3*4全零二维数组
 
输出:
 
array([[ 0. , 0. , 0. , 0. ],
 
   [ 0. , 0. , 0. , 0. ],
 
   [ 0. , 0. , 0. , 0. ]])
 
a1.dtype.name # 元素类型:'float64'
 
a1.size # 元素个数:12
 
a1.itemsize # 每个元素所占用的字节个数:8
 
 
 
 
 
a2 = np.ones(( 2 , 3 , 4 ), dtype = np.int16) # 创建2*3*4全1三维数组
 
a2 = np.ones(( 2 , 3 , 4 ), dtype = 'int16' # 创建2*3*4全1三维数组
 
输出:
 
array([[[ 1 , 1 , 1 , 1 ],
 
   [ 1 , 1 , 1 , 1 ],
 
   [ 1 , 1 , 1 , 1 ]],
 
 
 
   [[ 1 , 1 , 1 , 1 ],
 
   [ 1 , 1 , 1 , 1 ],
 
   [ 1 , 1 , 1 , 1 ]]], dtype = int16)
 
 
 
 
 
a3 = np.empty(( 2 , 3 )) # 创建2*3的未初始化二维数组
 
输出:(may vary)
 
array([[ 1. , 2. , 3. ],
 
   [ 4. , 5. , 6. ]])
 
 
 
a4 = np.arange( 10 , 30 , 5 ) # 初始值10,结束值:30(不包含),步长:5
 
输出:array([ 10 , 15 , 20 , 25 ])
 
a5 = np.arange( 0 , 2 , 0.3 ) # 初始值0,结束值:2(不包含),步长:0.2
 
输出:array([ 0. , 0.3 , 0.6 , 0.9 , 1.2 , 1.5 , 1.8 ])
 
 
from numpy import pi
 
np.linspace( 0 , 2 , 9 ) # 初始值0,结束值:2(包含),元素个数:9
 
输出:
 
array([ 0. , 0.25 , 0.5 , 0.75 , 1. , 1.25 , 1.5 , 1.75 , 2. ])
 
x = np.linspace( 0 , 2 * pi, 9 )
 
输出:
 
array([ 0.  , 0.78539816 , 1.57079633 , 2.35619449 , 3.14159265 ,
 
   3.92699082 , 4.71238898 , 5.49778714 , 6.28318531 ])
 
a = np.arange( 6 )
 
输出:
 
array([ 0 , 1 , 2 , 3 , 4 , 5 ])
 
b = np.arange( 12 ).reshape( 4 , 3 )
 
输出:
 
array([[ 0 , 1 , 2 ],
 
   [ 3 , 4 , 5 ],
 
   [ 6 , 7 , 8 ],
 
   [ 9 , 10 , 11 ]])
 
c = np.arange( 24 ).reshape( 2 , 3 , 4 )
 
输出:
 
array([[[ 0 , 1 , 2 , 3 ],
 
   [ 4 , 5 , 6 , 7 ],
 
   [ 8 , 9 , 10 , 11 ]],
 
   [[ 12 , 13 , 14 , 15 ],
 
   [ 16 , 17 , 18 , 19 ],
 
   [ 20 , 21 , 22 , 23 ]]]) 

使用numpy.set_printoptions可以设置numpy变量的打印格式 。

在ipython环境下,使用help(numpy.set_printoptions)查询使用帮助和示例 。

4. 多维数组的基本操作 。

加法和减法操作要求操作双方的维数信息一致,均为M*N为数组方可正确执行操作.

?
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
a = np.arange( 4 )
 
输出:
 
array([ 0 , 1 , 2 , 3 ])
 
b = a * * 2
 
输出:
 
array([ 0 , 1 , 4 , 9 ])
 
c = 10 * np.sin(a)
 
输出:
 
  array([ 0.  , 8.41470985 , 9.09297427 , 1.41120008 ])
 
 
 
 
 
n < 35
 
输出:
 
array([ True , True , True , True ], dtype = bool )
 
 
 
A = np.array([[ 1 , 1 ],[ 0 , 1 ]])
 
B = np.array([[ 2 , 0 ],[ 3 , 4 ]])
 
C = A * B # 元素点乘
 
输出:
 
array([[ 2 , 0 ],
 
   [ 0 , 4 ]])
 
D = A.dot(B) # 矩阵乘法
 
输出:
 
array([[ 5 , 4 ],
 
   [ 3 , 4 ]])
 
E = np.dot(A,B) # 矩阵乘法
 
输出:
 
array([[ 5 , 4 ],
 
   [ 3 , 4 ]])

多维数组操作过程中的类型转换 。

When operating with arrays of different types, the type of the resulting array corresponds to the more general or precise one (a behavior known as upcasting) 。

即操作不同类型的多维数组时,结果自动转换为精度更高类型的数组,即upcasting 。

?
1
2
3
4
5
6
7
a = np.ones(( 2 , 3 ),dtype = int # int32
 
b = np.random.random(( 2 , 3 ))  # float64
 
b + = a # 正确
 
a + = b # 错误
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
a = np.ones( 3 ,dtype = np.int32)
 
b = np.linspace( 0 ,pi, 3 )
 
c = a + b
 
d = np.exp(c * 1j )
 
输出:
 
array([ 0.54030231 + 0.84147098j , - 0.84147098 + 0.54030231j ,
 
   - 0.54030231 - 0.84147098j ])
 
d.dtype.name
 
输出:
 
  'complex128'

多维数组的一元操作,如求和、求最小值、最大值等 。

?
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
a = np.random.random(( 2 , 3 ))
 
a. sum ()
 
a. min ()
 
a. max ()
 
 
 
 
 
b = np.arange( 12 ).reshape( 3 , 4 )
 
输出:
 
array([[ 0 , 1 , 2 , 3 ],
 
   [ 4 , 5 , 6 , 7 ],
 
   [ 8 , 9 , 10 , 11 ]])
 
b. sum (axis = 0 ) # 按列求和
 
输出:
 
array([ 12 , 15 , 18 , 21 ])
 
b. sum (axis = 1 ) # 按行求和
 
输出:
 
array([ 6 , 22 , 38 ])
 
b.cumsum(axis = 0 ) # 按列进行元素累加
 
输出:
 
array([[ 0 , 1 , 2 , 3 ],
 
   [ 4 , 6 , 8 , 10 ],
 
   [ 12 , 15 , 18 , 21 ]])
 
b.cumsum(axis = 1 ) # 按行进行元素累加
 
输出:
 
array([[ 0 , 1 , 3 , 6 ],
 
   [ 4 , 9 , 15 , 22 ],
 
   [ 8 , 17 , 27 , 38 ]])
 
 
universal functions
 
 
B = np.arange( 3 )
 
np.exp(B)
 
np.sqrt(B)
 
C = np.array([ 2. , - 1. , 4. ])
 
np.add(B,C)

其他的ufunc函数包括:

all, any, apply_along_axis, argmax, argmin, argsort, average, bincount, ceil, clip, conj, corrcoef, cov, cross, cumprod, cumsum, diff, dot, floor,inner, lexsort, max, maximum, mean, median, min, minimum, nonzero, outer, prod, re, round, sort, std, sum, trace, transpose, var,vdot, vectorize, where 。

5. 数组索引、切片和迭代 。

?
1
2
3
4
5
6
7
8
9
10
11
a = np.arange( 10 ) * * 3
 
a[ 2 ]
 
a[ 2 : 5 ]
 
a[:: - 1 ] # 逆序输出
 
for i in a:
 
  print (i * * ( 1 / 3. ))
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
def f(x,y):
 
  return 10 * x + y
 
b = np.fromfunction(f,( 5 , 4 ),dtype = int )
 
b[ 2 , 3 ]
 
b[ 0 : 5 , 1 ]
 
b[:, 1 ]
 
b[ 1 : 3 ,:]
 
b[ - 1 ]
?
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
c = np.array([[[ 0 , 1 , 2 ],[ 10 , 11 , 12 ]],[[ 100 , 101 , 102 ],[ 110 , 111 , 112 ]]])
 
输出:
 
array([[[ 0 , 1 , 2 ],
 
   [ 10 , 11 , 12 ]],
 
 
 
   [[ 100 , 101 , 102 ],
 
   [ 110 , 111 , 112 ]]])
 
c.shape
 
输出:
 
( 2L , 2L , 3L )
 
c[ 0 ,...]
 
c[ 0 ,:,:]
 
输出:
 
array([[ 0 , 1 , 2 ],
 
   [ 10 , 11 , 12 ]])
 
c[:,:, 2 ]
 
c[..., 2 ]
 
输出:
 
array([[ 2 , 12 ],
 
   [ 102 , 112 ]])
 
 
 
for row in c:
 
  print (row)
 
 
 
for element in c.flat:
 
  print (element)
?
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
a = np.floor( 10 * np.random.random(( 3 , 4 )))
 
输出:
 
array([[ 3. , 9. , 8. , 4. ],
 
   [ 2. , 1. , 4. , 6. ],
 
   [ 0. , 6. , 0. , 2. ]])
 
a.ravel()
 
输出:
 
array([ 3. , 9. , 8. , ..., 6. , 0. , 2. ])
 
a.reshape( 6 , 2 )
 
输出:
 
array([[ 3. , 9. ],
 
   [ 8. , 4. ],
 
   [ 2. , 1. ],
 
   [ 4. , 6. ],
 
   [ 0. , 6. ],
 
   [ 0. , 2. ]])
 
a.T
 
输出:
 
array([[ 3. , 2. , 0. ],
 
   [ 9. , 1. , 6. ],
 
   [ 8. , 4. , 0. ],
 
   [ 4. , 6. , 2. ]])
 
a.T.shape
 
输出:
 
( 4L , 3L )
 
a.resize(( 2 , 6 ))
 
输出:
 
array([[ 3. , 9. , 8. , 4. , 2. , 1. ],
 
   [ 4. , 6. , 0. , 6. , 0. , 2. ]])
 
a.shape
 
输出:
 
( 2L , 6L )
 
a.reshape( 3 , - 1 )
 
输出:
 
array([[ 3. , 9. , 8. , 4. ],
 
   [ 2. , 1. , 4. , 6. ],
 
   [ 0. , 6. , 0. , 2. ]])

详查以下函数:

ndarray.shape, reshape, resize, ravel 。

6. 组合不同的多维数组 。

?
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
a = np.floor( 10 * np.random.random(( 2 , 2 )))
 
输出:
 
array([[ 5. , 2. ],
 
   [ 6. , 2. ]])
 
b = np.floor( 10 * np.random.random(( 2 , 2 )))
 
输出:
 
array([[ 0. , 2. ],
 
   [ 4. , 1. ]])
 
np.vstack((a,b))
 
输出:
 
array([[ 5. , 2. ],
 
   [ 6. , 2. ],
 
   [ 0. , 2. ],
 
   [ 4. , 1. ]])
 
np.hstack((a,b))
 
输出:
 
array([[ 5. , 2. , 0. , 2. ],
 
   [ 6. , 2. , 4. , 1. ]])
 
 
 
 
 
from numpy import newaxis
 
np.column_stack((a,b))
 
输出:
 
array([[ 5. , 2. , 0. , 2. ],
 
   [ 6. , 2. , 4. , 1. ]])
 
 
 
 
 
a = np.array([ 4. , 2. ])
 
b = np.array([ 2. , 8. ])
 
a[:,newaxis]
 
输出:
 
array([[ 4. ],
 
   [ 2. ]])
 
b[:,newaxis]
 
输出:
 
array([[ 2. ],
 
   [ 8. ]])
 
np.column_stack((a[:,newaxis],b[:,newaxis]))
 
输出:
 
array([[ 4. , 2. ],
 
   [ 2. , 8. ]])
 
np.vstack((a[:,newaxis],b[:,newaxis]))
 
输出:
 
array([[ 4. ],
 
   [ 2. ],
 
   [ 2. ],
 
   [ 8. ]])
 
np.r_[ 1 : 4 , 0 , 4 ]
 
输出:
 
array([ 1 , 2 , 3 , 0 , 4 ])
 
np.c_[np.array([[ 1 , 2 , 3 ]]), 0 , 0 , 0 ,np.array([[ 4 , 5 , 6 ]])]
 
输出:
 
array([[ 1 , 2 , 3 , 0 , 0 , 0 , 4 , 5 , 6 ]])

详细使用请查询以下函数:

hstack, vstack, column_stack, concatenate, c_, r_ 。

7. 将较大的多维数组分割成较小的多维数组 。

?
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
a = np.floor( 10 * np.random.random(( 2 , 12 )))
 
输出:
 
array([[ 9. , 7. , 9. , ..., 3. , 2. , 4. ],
 
   [ 5. , 3. , 3. , ..., 9. , 7. , 7. ]])
 
np.hsplit(a, 3 )
 
输出:
 
[array([[ 9. , 7. , 9. , 6. ],
 
   [ 5. , 3. , 3. , 1. ]]), array([[ 7. , 2. , 1. , 6. ],
 
   [ 7. , 5. , 0. , 2. ]]), array([[ 9. , 3. , 2. , 4. ],
 
   [ 3. , 9. , 7. , 7. ]])]
 
np.hsplit(a,( 3 , 4 ))
 
输出:
 
[array([[ 9. , 7. , 9. ],
 
   [ 5. , 3. , 3. ]]), array([[ 6. ],
 
   [ 1. ]]), array([[ 7. , 2. , 1. , ..., 3. , 2. , 4. ],
 
   [ 7. , 5. , 0. , ..., 9. , 7. , 7. ]])]

实现类似功能的函数包括:

hsplit,vsplit,array_split 。

8.  多维数组的复制操作 。

?
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
a = np.arange( 12 )
 
输出:
 
array([ 0 , 1 , 2 , ..., 9 , 10 , 11 ])
 
 
 
not copy at all
 
 
 
b = a
 
b is a # True
 
b.shape = 3 , 4
 
a.shape # (3L,4L)
 
 
 
def f(x) # Python passes mutable objects as references, so function calls make no copy.
 
  print ( id (x)) # id是python对象的唯一标识符
 
 
 
id (a) # 111833936L
 
id (b) # 111833936L
 
f(a)  # 111833936L
 
 
 
 
 
浅复制
c = a.view()
 
c is a # False
 
c.base is a # True
 
c.flags.owndata # False
 
c.shape = 2 , 6
 
a.shape # (3L,4L)
 
c[ 0 , 4 ] = 1234
 
print (a)
 
输出:
 
array([[ 0 , 1 , 2 , 3 ],
 
   [ 1234 , 5 , 6 , 7 ],
 
   [ 8 , 9 , 10 , 11 ]])
 
s = a[:, 1 : 3 ]
 
s[:] = 10
 
print (a)
 
输出:
 
array([[ 0 , 10 , 10 , 3 ],
 
   [ 1234 , 10 , 10 , 7 ],
 
   [ 8 , 10 , 10 , 11 ]])
 
 
 
 
 
深复制
d = a.copy()
 
d is a # False
 
d.base is a # False
 
d[ 0 , 0 ] = 9999
 
print (a)
 
输出:
 
array([[ 0 , 10 , 10 , 3 ],
 
   [ 1234 , 10 , 10 , 7 ],
 
   [ 8 , 10 , 10 , 11 ]])

numpy基本函数和方法一览 。

https://docs.scipy.org/doc/numpy-dev/reference/routines.html#routines 。

9. 特殊的索引技巧 。

?
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
a = np.arange( 12 ) * * 2
输出:
array([ 0 , 1 , 4 , ..., 81 , 100 , 121 ])
i = np.array([ 1 , 1 , 3 , 8 , 5 ])
a[i]
输出:
array([ 1 , 1 , 9 , 64 , 25 ])
 
j = np.array([[ 3 , 4 ],[ 9 , 7 ]])
a[j]
输出:
array([[ 9 , 16 ],
   [ 81 , 49 ]])
 
 
palette = np.array([[ 0 , 0 , 0 ],[ 255 , 0 , 0 ],[ 0 , 255 , 0 ],[ 0 , 0 , 255 ],[ 255 , 255 , 255 ]])
image = np.array([[ 0 , 1 , 2 , 0 ],[ 0 , 3 , 4 , 0 ]])
palette[image]
输出:
array([[[ 0 , 0 , 0 ],
   [ 255 , 0 , 0 ],
   [ 0 , 255 , 0 ],
   [ 0 , 0 , 0 ]],
 
   [[ 0 , 0 , 0 ],
   [ 0 , 0 , 255 ],
   [ 255 , 255 , 255 ],
   [ 0 , 0 , 0 ]]])
 
 
i = np.array([[ 0 , 1 ],[ 1 , 2 ]])
j = np.array([[ 2 , 1 ],[ 3 , 3 ]])
a[i,j]
输出:
array([[ 2 , 5 ],
   [ 7 , 11 ]])
l = [i,j]
a[l]
输出:
array([[ 2 , 5 ],
   [ 7 , 11 ]])
 
 
a[i, 2 ]
输出:
array([[ 2 , 6 ],
   [ 6 , 10 ]])
 
a[:,j]
输出:
array([[[ 2 , 1 ],
   [ 3 , 3 ]],
 
   [[ 6 , 5 ],
   [ 7 , 7 ]],
 
   [[ 10 , 9 ],
   [ 11 , 11 ]]])
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
s = np.array([i,j])
print (s)
array([[[ 0 , 1 ],
   [ 1 , 2 ]],
 
   [[ 2 , 1 ],
   [ 3 , 3 ]]])
 
a[ tuple (s)]
输出:
array([[ 2 , 5 ],
   [ 7 , 11 ]])
print (tupe(s))
输出:
(array([[ 0 , 1 ],
   [ 1 , 2 ]]), array([[ 2 , 1 ],
   [ 3 , 3 ]]))

10. 寻找最大值/最小值及其对应索引值 。

?
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
time = np.linspace( 20 , 145 , 5 )
输出:
  array([ 20. , 51.25 , 82.5 , 113.75 , 145. ])
 
data = np.sin(np.arange( 20 )).reshape( 5 , 4 )
输出:
array([[ 0.  , 0.84147098 , 0.90929743 , 0.14112001 ],
   [ - 0.7568025 , - 0.95892427 , - 0.2794155 , 0.6569866 ],
   [ 0.98935825 , 0.41211849 , - 0.54402111 , - 0.99999021 ],
   [ - 0.53657292 , 0.42016704 , 0.99060736 , 0.65028784 ],
   [ - 0.28790332 , - 0.96139749 , - 0.75098725 , 0.14987721 ]])
 
ind = data.argmax(axis = 0 )
输出:
array([ 2 , 0 , 3 , 1 ], dtype = int64)
 
time_max = time[ind]
输出:
array([ 82.5 , 20. , 113.75 , 51.25 ])
 
data_max = data[ind, xrange (data.shape[ 1 ])]
输出:
array([ 0.98935825 , 0.84147098 , 0.99060736 , 0.6569866 ])
 
np. all (data_max = = data. max (axis = 0 ))
输出:
True
 
 
 
a = np.arange( 5 )
a[[ 1 , 3 , 4 ]] = 0
print (a)
输出:
array([ 0 , 0 , 2 , 0 , 0 ])
?
1
2
3
4
5
6
7
8
9
10
11
12
a = np.arange( 5 )
a[[ 0 , 0 , 2 ]] = [ 1 , 2 , 3 ]
print (a)
输出:
array([ 2 , 1 , 3 , 3 , 4 ])
 
 
a = np.arange( 5 )
a[[ 0 , 0 , 2 ]] + = 1
print (a)
输出:
array([ 1 , 1 , 3 , 3 , 4 ])
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
a = np.arange( 12 ).reshape( 3 , 4 )
  b = a > 4
输出:
array([[ False , False , False , False ],
   [ False , True , True , True ],
   [ True , True , True , True ]], dtype = bool )
 
a[b]
输出:
array([ 5 , 6 , 7 , 8 , 9 , 10 , 11 ])
 
a[b] = 0
print (a)
输出:
array([[ 0 , 1 , 2 , 3 ],
   [ 4 , 0 , 0 , 0 ],
   [ 0 , 0 , 0 , 0 ]])
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
a = np.arange( 12 ).reshape( 3 , 4 )
b1 = np.array([ False , True , True ])
b2 = n.array([ True , False , True , False ])
a[b1,:]
输出:
array([[ 4 , 5 , 6 , 7 ],
   [ 8 , 9 , 10 , 11 ]])
 
a[b1]
输出:
array([[ 4 , 5 , 6 , 7 ],
   [ 8 , 9 , 10 , 11 ]])
 
a[:,b2]
输出:
array([[ 0 , 2 ],
   [ 4 , 6 ],
   [ 8 , 10 ]])
 
a[b1,b2]
输出:
array([ 4 , 10 ])

11. ix_() function 。

?
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
a = np.array([ 2 , 3 , 4 , 5 ])
b = np.array([ 8 , 5 , 4 ])
c = np.array([ 5 , 4 , 6 , 8 , 3 ])
ax,bx,cx = np.ix_(a,b,c)
print (ax) # (4L, 1L, 1L)
输出:
array([[[ 2 ]],
 
   [[ 3 ]],
 
   [[ 4 ]],
 
   [[ 5 ]]])
print (bx) # (1L, 3L, 1L)
输出:
array([[[ 8 ],
   [ 5 ],
   [ 4 ]]])
print (cx) # (1L, 1L, 5L)
输出:
array([[[ 5 , 4 , 6 , 8 , 3 ]]])
 
 
result = ax + bx * cx
输出:
array([[[ 42 , 34 , 50 , 66 , 26 ],
   [ 27 , 22 , 32 , 42 , 17 ],
   [ 22 , 18 , 26 , 34 , 14 ]],
 
   [[ 43 , 35 , 51 , 67 , 27 ],
   [ 28 , 23 , 33 , 43 , 18 ],
   [ 23 , 19 , 27 , 35 , 15 ]],
 
   [[ 44 , 36 , 52 , 68 , 28 ],
   [ 29 , 24 , 34 , 44 , 19 ],
   [ 24 , 20 , 28 , 36 , 16 ]],
 
   [[ 45 , 37 , 53 , 69 , 29 ],
   [ 30 , 25 , 35 , 45 , 20 ],
   [ 25 , 21 , 29 , 37 , 17 ]]])
 
result[ 3 , 2 , 4 ]
输出: 17

12. 线性代数运算 。

?
1
2
3
4
5
6
7
8
9
a = np.array([[ 1. , 2. ],[ 3. , 4. ]])
a.transpose() # 转置
np.linalg.inv(a) # 求逆
u = np.eye( 2 ) # 产生单位矩阵
np.dot(a,a) # 矩阵乘积
np.trace(a) # 求矩阵的迹
y = np.array([ 5. ],[ 7. ]])
np.linalg.solve(a,y) # 求解线性方程组
np.linalg.eig(a) # 特征分解

“Automatic” Reshaping 。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
a = np.arange( 30 )
a.shape = 2 , - 1 , 3
a.shape # (2L, 5L, 3L)
print (a)
array([[[ 0 , 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 ]]])
?
1
2
3
4
5
6
7
8
9
x = np.arange( 0 , 10 , 2 )
y = np.arange( 5 )
m = np.vstack([x,y])
输出:
array([[ 0 , 2 , 4 , 6 , 8 ],
   [ 0 , 1 , 2 , 3 , 4 ]])
n = np.hstack([x,y])
输出:
array([ 0 , 2 , 4 , 6 , 8 , 0 , 1 , 2 , 3 , 4 ])

13. 矩阵的创建 。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
a = np.array([ 1 , 2 , 3 ])
a1 = np.mat(a)
输出:
matrix([[ 1 , 2 , 3 ]])
type (a1)
输出:
numpy.matrixlib.defmatrix.matrix
a1.shape
输出:
( 1L , 3L )
a.shape
输出:
( 3L ,)
 
b = np.matrix([ 1 , 2 , 3 ])
输出:
matrix([[ 1 , 2 , 3 ]])
 
from numpy import *
data1 = mat(zeros(( 3 , 3 )))
data2 = mat(ones(( 2 , 4 )))
data3 = mat(random.rand( 2 , 2 ))
data4 = mat(random.randint( 2 , 8 ,size = ( 2 , 5 )))
data5 = mat(eye( 2 , 2 ,dtype = int ))

14. 常见的矩阵运算 。

?
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
a1 = mat([ 1 , 2 ])
a2 = mat([[ 1 ],[ 2 ]])
a3 = a1 * a2
print (a3)
输出:
matrix([[ 5 ]])
 
print (a1 * 2 )
输出:
matrix([[ 2 , 4 ]])
 
a1 = mat(eye( 2 , 2 ) * 0.5 )
print (a1.I)
输出:
matrix([[ 2. , 0. ],
   [ 0. , 2. ]])
 
 
a1 = mat([[ 1 , 2 ],[ 2 , 3 ],[ 4 , 2 ]])
a1. sum (axis = 0 )
输出:
matrix([[ 7 , 7 ]])
a1. sum (axis = 1 )
输出:
matrix([[ 3 ],
   [ 5 ],
   [ 6 ]])
a1. max () # 求矩阵元素最大值
输出:
4
a1. min () # 求矩阵元素最小值
输出:
1
 
np. max (a1, 0 ) # 求矩阵每列元素最大值
输出:
matrix([[ 4 , 3 ]])
np. max (a1, 1 ) # 求矩阵每行元素最大值
输出:
matrix([[ 2 ],
   [ 3 ],
   [ 4 ]])
 
 
a = mat(ones(( 2 , 2 )))
b = mat(eye(( 2 )))
c = hstack((a,b))
输出:
matrix([[ 1. , 1. , 1. , 0. ],
   [ 1. , 1. , 0. , 1. ]])
d = vstack((a,b))
输出:
matrix([[ 1. , 1. ],
   [ 1. , 1. ],
   [ 1. , 0. ],
   [ 0. , 1. ]])

15. 矩阵、数组、列表之间的互相转换 。

?
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
aa = [[ 1 , 2 ],[ 3 , 4 ],[ 5 , 6 ]]
bb = array(aa)
cc = mat(bb)
 
cc.getA() # 矩阵转换为数组
cc.tolist() # 矩阵转换为列表
bb.tolist() # 数组转换为列表
 
 
# 当列表为一维时,情况有点特殊
aa = [ 1 , 2 , 3 , 4 ]
bb = array(aa)
输出:
array([ 1 , 2 , 3 , 4 ])
cc = mat(bb)
输出:
matrix([[ 1 , 2 , 3 , 4 ]])
 
cc.tolist()
输出:
[[ 1 , 2 , 3 , 4 ]]
 
bb.tolist()
输出:
[ 1 , 2 , 3 , 4 ]
 
cc.tolist()[ 0 ]
输出:
[ 1 , 2 , 3 , 4 ]

内容整理参考链接如下:

https://docs.scipy.org/doc/numpy-dev/user/quickstart.html 。

http://python.usyiyi.cn/translate/NumPy_v111/reference/arrays.scalars.html#arrays-scalars-built-in 。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我.

原文链接:https://www.cnblogs.com/xzcfightingup/p/7598293.html 。

最后此篇关于python中numpy的矩阵、多维数组的用法的文章就讲到这里了,如果你想了解更多关于python中numpy的矩阵、多维数组的用法的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com