NumPy是一个关于矩阵运算的库,熟悉Matlab的都应该清楚,这个库就是让python能够进行矩阵话的操作,而不用去写循环操作。
下面对numpy中的操作进行总结。
numpy包含两种基本的数据类型:数组和矩阵。
数组(Arrays)
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
|
>>> from numpy import * >>> a1 = array([ 1 , 1 , 1 ]) #定义一个数组 >>> a2 = array([ 2 , 2 , 2 ]) >>> a1 + a2 #对于元素相加 array([ 3 , 3 , 3 ]) >>> a1 * 2 #乘一个数 array([ 2 , 2 , 2 ]) ## >>> a1 = array([ 1 , 2 , 3 ]) >>> a1 array([ 1 , 2 , 3 ]) >>> a1 * * 3 #表示对数组中的每个数做平方 array([ 1 , 8 , 27 ]) ##取值,注意的是它是以0为开始坐标,不matlab不同 >>> a1[ 1 ] 2 ##定义多维数组 >>> a3 = array([[ 1 , 2 , 3 ],[ 4 , 5 , 6 ]]) >>> a3 array([[ 1 , 2 , 3 ], [ 4 , 5 , 6 ]]) >>> a3[ 0 ] #取出第一行的数据 array([ 1 , 2 , 3 ]) >>> a3[ 0 , 0 ] #第一行第一个数据 1 >>> a3[ 0 ][ 0 ] #也可用这种方式 1 ##数组点乘,相当于matlab点乘操作 >>> a1 = array([ 1 , 2 , 3 ]) >>> a2 = array([ 4 , 5 , 6 ]) >>> a1 * a2 array([ 4 , 10 , 18 ]) |
Numpy有许多的创建数组的函数:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
import numpy as np a = np.zeros(( 2 , 2 )) # Create an array of all zeros print a # Prints "[[ 0. 0.] # [ 0. 0.]]" b = np.ones(( 1 , 2 )) # Create an array of all ones print b # Prints "[[ 1. 1.]]" c = np.full(( 2 , 2 ), 7 ) # Create a constant array print c # Prints "[[ 7. 7.] # [ 7. 7.]]" d = np.eye( 2 ) # Create a 2x2 identity matrix print d # Prints "[[ 1. 0.] # [ 0. 1.]]" e = np.random.random(( 2 , 2 )) # Create an array filled with random values print e # Might print "[[ 0.91940167 0.08143941] # [ 0.68744134 0.87236687]]" |
数组索引(Array indexing)
矩阵
矩阵的操作与Matlab语言有很多的相关性。
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
|
#创建矩阵 >>> m = mat([ 1 , 2 , 3 ]) >>> m matrix([[ 1 , 2 , 3 ]]) #取值 >>> m[ 0 ] #取一行 matrix([[ 1 , 2 , 3 ]]) >>> m[ 0 , 1 ] #第一行,第2个数据 2 >>> m[ 0 ][ 1 ] #注意不能像数组那样取值了 Traceback (most recent call last): File "<stdin>" , line 1 , in <module> File "/usr/lib64/python2.7/site-packages/numpy/matrixlib/defmatrix.py" , line 305 , in __getitem__ out = N.ndarray.__getitem__( self , index) IndexError: index 1 is out of bounds for axis 0 with size 1 #将Python的列表转换成NumPy的矩阵 >>> list = [ 1 , 2 , 3 ] >>> mat( list ) matrix([[ 1 , 2 , 3 ]]) #矩阵相乘 >>> m1 = mat([ 1 , 2 , 3 ]) #1行3列 >>> m2 = mat([ 4 , 5 , 6 ]) >>> m1 * m2.T #注意左列与右行相等 m2.T为转置操作 matrix([[ 32 ]]) >>> multiply(m1,m2) #执行点乘操作,要使用函数,特别注意 matrix([[ 4 , 10 , 18 ]]) #排序 >>> m = mat([[ 2 , 5 , 1 ],[ 4 , 6 , 2 ]]) #创建2行3列矩阵 >>> m matrix([[ 2 , 5 , 1 ], [ 4 , 6 , 2 ]]) >>> m.sort() #对每一行进行排序 >>> m matrix([[ 1 , 2 , 5 ], [ 2 , 4 , 6 ]]) >>> m.shape #获得矩阵的行列数 ( 2 , 3 ) >>> m.shape[ 0 ] #获得矩阵的行数 2 >>> m.shape[ 1 ] #获得矩阵的列数 3 #索引取值 >>> m[ 1 ,:] #取得第一行的所有元素 matrix([[ 2 , 4 , 6 ]]) >>> m[ 1 , 0 : 1 ] #第一行第0个元素,注意左闭右开 matrix([[ 2 ]]) >>> m[ 1 , 0 : 3 ] matrix([[ 2 , 4 , 6 ]]) >>> m[ 1 , 0 : 2 ] matrix([[ 2 , 4 ]]) |
扩展矩阵函数tile()
例如,要计算[0,0,0]到一个多维矩阵中每个点的距离,则要将[0,0,0]进行扩展。
tile(inX, (i,j)) ;i是扩展个数,j是扩展长度
实例如下:
1
2
3
4
5
6
7
8
9
10
|
>>>x = mat([ 0 , 0 , 0 ]) >>> x matrix([[ 0 , 0 , 0 ]]) >>> tile(x,( 3 , 1 )) #即将x扩展3个,j=1,表示其列数不变 matrix([[ 0 , 0 , 0 ], [ 0 , 0 , 0 ], [ 0 , 0 , 0 ]]) >>> tile(x,( 2 , 2 )) #x扩展2次,j=2,横向扩展 matrix([[ 0 , 0 , 0 , 0 , 0 , 0 ], [ 0 , 0 , 0 , 0 , 0 , 0 ]]) |
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。
原文链接:http://blog.csdn.net/taoyanqi8932/article/details/52703686