重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
python实现矩阵乘法的方法
创新互联建站从2013年成立,先为桐柏等服务建站,桐柏等地企业,进行企业商务咨询服务。为桐柏企业网站制作PC+手机+微官网三网同步一站式服务解决您的所有建站问题。
本文实例讲述了python实现矩阵乘法的方法。分享给大家供大家参考。
具体实现方法如下:
def matrixMul(A, B):
res = [[0] * len(B[0]) for i in range(len(A))]
for i in range(len(A)):
for j in range(len(B[0])):
for k in range(len(B)):
res[i][j] += A[i][k] * B[k][j]
return res
def matrixMul2(A, B):
return [[sum(a * b for a, b in zip(a, b)) for b in zip(*B)] for a in A]
a = [[1,2], [3,4], [5,6], [7,8]]
b = [[1,2,3,4], [5,6,7,8]]
print matrixMul(a,b)
print matrixMul(b,a)
print "-"*90
print matrixMul2(a,b)
print matrixMul2(b,a)
print "-"*90
from numpy import dot
print map(list,dot(a,b))
print map(list,dot(b,a))
#Out:
#[[11, 14, 17, 20], [23, 30, 37, 44], [35, 46, 57, 68], [47, 62, 77, 92]]
#[[50, 60], [114, 140]]
#------------------------------------------------------------------------
#[[11, 14, 17, 20], [23, 30, 37, 44], [35, 46, 57, 68], [47, 62, 77, 92]]
#[[50, 60], [114, 140]]
#------------------------------------------------------------------------
#[[11, 14, 17, 20], [23, 30, 37, 44], [35, 46, 57, 68], [47, 62, 77, 92]]
#[[50, 60], [114, 140]]
希望本文所述对大家的Python程序设计有所帮助。
python3.5引入了一个新的语法@来表示矩阵乘法,但标准库内并没有使用它的地方,numpy中可以使用。
x=randn这个写法是不对的。
randn是numpy里的一个生成随机array的函数。
比如说要生成一个三行两列的随机array,可以这样写:
import numpy
x = numpy.random.randn(3,2)
像这样:
后面这个mat=x.T.dot(...)是先求这个3*3矩阵的转置(.T),再求与点积(.dot)
点积就是矩阵各个对应元素相乘, 这个时候要求两个矩阵必须同样大小。
其实可以分步来的,就知道做了什么运算了。
像这样:
dot(2)是点乘常数就不说了,
那个x.T.dot([1,2,3])就是x.T的
1*1+2*2+3*3=14
2*1+3*2+4*3=20
懂了木有 =。=
def mmult(a,b):
zip_b = zip(*b)
return [[sum(ele_a*ele_b for ele_a, ele_b in zip(row_a, col_b))
for col_b in zip_b] for row_a in a]
x = [[1,2,3],[4,5,6],[7,8,9],[10,11,12]]
y = [[1,2],[1,2],[3,4]]
print(mmult(x,y))
或者可以直接用numpy
import numpy as np # I want to check my solution with numpy
mx = np.matrix(x)
my = np.matrix(y)
print(mx * my)