《Python学习手册-第3版》中提到python可以进行复杂的数学计算,甚至堪比MATLAB,随便写了一个矩阵相乘计算的本来应该要导入numpy这个模块的,但一直在windows下没有弄好,暂时就木有导入强大的模块功能了,苦逼的只能自己写矩阵相乘……
这里写的是一般通用的(m*n)×(n*k)矩阵相乘,这里的m*n代表m行n列矩阵,我们知道,矩阵相乘这里的n是一定要相同的!由于python的特性,还写出了两种不一样的算法哦!O(∩_∩)O哈哈~直接上代码:
#coding:utf-8
# 矩阵相乘计算 M*N=R
# @author : hejiao
# @date : 2015-08-27
M = [[1,1,1],[1,1,1],[1,1,1],[1,1,1]]
N = [[1,1],[1,1],[1,1]]
R = [[0,0],[0,0],[0,0],[0,0]]
for i in range(len(M)):
for j in range(2):
sum = 0
for k in range(len(N)):
sum += M[i][k]*N[k][j]
R[i][j] = sum
print R
# Result is [[3,3],[3,3],[3,3],[3,3]]
可惜的是目前还不知道怎么得到矩阵的列数,所以在j循环时只能硬编码成2,然后就是列表添加数据简单的添加就是append,但是复杂的二维的数据添加暂时还不知道,所以就初始化了,等以后知道了再来修改吧!第二种是利用的python可以获得矩阵的一列数据[row[1] for row in N]可以得到一列数据,例如:N = [[1,2],[3,4],[5,6]],则[row[1] for row in N]就是[2,4,6]了,代码如下:
M = [[1,1,1],[1,1,1],[1,1,1],[1,1,1]]
N = [[1,1],[1,1],[1,1]]
R = [[0,0],[0,0],[0,0],[0,0]] #初始化
for i in range(len(M)):
for j in range(2):
a = M[i]
b = [row[j] for row in N]
sum = 0
for k in range(len(N)):
sum += a[k]*b[k]
R[i][j] = sum
print R