|
楼主 |
发表于 2016-10-3 20:32:23
|
显示全部楼层
用List模拟 矩阵
不用numpy模块,就自己实现一个 矩阵乘法 函数。
由于没有了数据类型的限制,python 自动用大数运算进行计算,
算到第几项,就看电脑内存有多大了~
- #用List模拟 矩阵
- def MatDot(matA, matB): # 矩阵乘法
- mat_rslt = [[1,1],[1,0]]
- mat_rslt[0][0] = matA[0][0] * matB[0][0] + matA[0][1] * matB[1][0]
- mat_rslt[0][1] = matA[0][0] * matB[0][1] + matA[0][1] * matB[1][1]
- mat_rslt[1][0] = matA[1][0] * matB[0][0] + matA[1][1] * matB[1][0]
- mat_rslt[1][1] = matA[1][0] * matB[0][1] + matA[1][1] * matB[1][1]
- return mat_rslt
- def MatrixPower_ls(n): # 矩阵的幂运算
- Matx = [[1,1],[1,0]]
- if n == 1:
- mat = Matx
- elif n%2 == 0 : # 偶数
- mat = MatrixPower_ls(n / 2) # 递归
- mat = MatDot(mat, mat) # 幂运算
- elif n%2 == 1 : # 奇数
- mat = MatrixPower_ls((n-1) / 2) # 递归
- mat = MatDot(mat, mat) # 幂运算
- mat = MatDot(mat, Matx)
- return mat
- def Fib_matx_ls(n): # 计算Fibnacci的第n项
- if n<0: return None
- if n<2: return (0,1)[n]
- fib_matrix = MatrixPower_ls(n-1)
- return fib_matrix[0][0]
- print(300, Fib_matx_ls(300))
复制代码
结果:
- 300 222232244629420445529739893461909967206666939096499764990979600
复制代码 |
|