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