作者:金良(golden1314521@gmail.com) csdn博客:http://blog.csdn.net/u012176591
1.list(列表)
删除列表myList的第i个元素:del myList[i]
方阵A转置:zip(*A)
求各行的和:map(sum,A)
求各列的和:map(sum,zip(*A))
矩阵乘法函数dot()用法:
myMat1 = [[1,0,0,0,2],\
[0,0,3,0,0],\
[0,0,0,0,0],\
[0,4,0,0,0]]
myMat2 = copy.deepcopy(myMat1)
v1 = [2,0,2,0,0]
v2 = [0,1,1,1,0]
i、一维与一维:
print dot(v1,v2)
打印2.
ii、一维与二维:
print dot(myMat1,v1)
打印[2 6 0 0]
print dot(v1,list(array(myMat1).transpose()))
打印[2 6 0 0]
iii、二维与二维:
A = [[1,2,3],[4,5,6]]
B = [[1,4],[2,5],[3,6]]
print dot(A,B)
输出:
[[14 32]
[32 77]]
求特征值和特征向量:
A = [[0,1,0,1,1,1],[0,0,0,1,1,1],[1,1,0,1,0,0],[0,0,0,0,1,1],[0,0,1,0,0,1],[0,0,1,0,0,0]]
a,b = linalg.eig(A)
a是特征值组成的行向量(array),b由特征向量(列向量)组成的矩阵(array)
list不能直接除以一个数,要转换成array才行
A = [[0,1,0,1,1,1],[0,0,0,1,1,1],[1,1,0,1,0,0],[0,0,0,0,1,1],[0,0,1,0,0,1],[0,0,1,0,0,0]]
print array(A)/2.0
列表不能直接加减:
print myList*2
print [myList]*2
结果依次是:
[1, 2, 3, 1, 2, 3]
[[1, 2, 3], [1, 2, 3]]
求行列式:
A = [[0,1,0,1,1,1],[0,0,0,1,1,1],[1,1,0,1,0,0],[0,0,0,0,1,1],[0,0,1,0,0,1],[0,0,1,0,0,0]]
print linalg.det(list(A))
print linalg.det(array(A))
print linalg.det(mat(A))
注意A必须是方阵。
求逆:
print linalg.inv(list(A))
print linalg.inv(array(A))
print linalg.inv(mat(A))
创建对角矩阵:
print diag([1,2,3])
A = diag([1,2,3])
a,b = linalg.eig(A)
print "A: ",A
print "a: ",a
print "b: ",b
结果:
A: [[1 0 0]
[0 2 0]
[0 0 3]]
a: [ 1. 2. 3.]
b: [[ 1. 0. 0.]
[ 0. 1. 0.]
[ 0. 0. 1.]]
list索引:
x = range(10)
print type(x)#list类型
print x[-2]#从后往前,最后一个是-1,倒数第二个是-2
print x[1:7]#左闭右开
print x[1:7:2]#指定步长值
[[ 6 8 10]
[18 20 22]]
8
[1, 2, 3, 4, 5, 6]
[1, 3, 5]
2.array(数组):
数组和矩阵都可以行列转换(类似于矩阵转置),列表无此用法:
A = [[0,1,0,1,1,1],[0,0,0,1,1,1],[1,1,0,1,0,0],[0,0,0,0,1,1],[0,0,1,0,0,1],[0,0,1,0,0,0]]
print array(A).T
print mat(A).T
print array(A).transpose()
print mat(A).transpose()
数组和矩阵都可以加减:
A = [[0,1,0,1,1,1],[0,0,0,1,1,1],[1,1,0,1,0,0],[0,0,0,0,1,1],[0,0,1,0,0,1],[0,0,1,0,0,0]]
B= [[1]*6]*6
print array(A)+array(B)
print array(A)-array(B)
数组索引:
A=arange(36).reshape(6,6)#数组
print A
print array(A)[1,2]#第1行第2列
print array(A)[1:5:2,::2]#左闭右开,输出1,3行,每行步长2
输出:
[[ 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]
[30 31 32 33 34 35]]
8
[[ 6 8 10]
[18 20 22]]
3.mat:
官方文档建议我们使用二维数组代替矩阵来进行矩阵运算;因为二维数组用得较多,而且基本可取代矩阵。