【发布时间】:2018-12-26 02:35:34
【问题描述】:
输入:n times m 矩阵 A 带有整数条目。例如考虑矩阵
A = [[2,1,0],[0,1,2]]
输出:A 的内核/空空间的整数基。例如对于上面的矩阵,整数基是
[[1,-2,1]]
我正在使用来自 stackoverflow post 的想法,首先计算一个有理基,然后通过与分母的 lcm 相乘来计算一个整数基,使用以下 (Python 2.7) 代码:
import numpy as np
from sympy import Matrix,lcm
from fractions import Fraction
def ker_int_basis(B):
BKer = 1.0*np.array(Matrix(B).nullspace())
Bk =[]
for basis in BKer:
l = lcm(map(lambda x: Fraction(x).limit_denominator().denominator,map(str,basis)))
basis = map(int,l*basis)
Bk.append(basis)
Bk = np.array(Bk)
return Bk
它适用于小例子。但是上面的代码非常缓慢,而且我拥有的矩阵是10000 times 500 或更大。上面的代码即使运行了几个小时也没有输出。
如何使代码更快?考虑到矩阵非常大,我更喜欢 GPU 实现。多核 CPU 也将是一个改进。甚至在上述代码中更有效地使用循环和数据结构的建议也受到欢迎。
【问题讨论】:
标签: python numpy gpu linear-algebra multicore