Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在python中比使用numpy.linalg.lstsq更快地求解线性方程组?_Python_Performance_Numpy_Math_Computer Science - Fatal编程技术网

如何在python中比使用numpy.linalg.lstsq更快地求解线性方程组?

如何在python中比使用numpy.linalg.lstsq更快地求解线性方程组?,python,performance,numpy,math,computer-science,Python,Performance,Numpy,Math,Computer Science,我试图用numpy.linalg.lstsq解一个跨越几十万到二十万个方程的线性系统,但时间太长了。我能做些什么来加快速度 矩阵稀疏,有数百列(尺寸约为150 000 x 140),系统过于确定 这里有一些即兴的技巧,可以大大加快对指定维度的随机数据的计算速度 不过,我不知道这在数字上听起来有多像 import numpy as np from time import perf_counter def lstsq(A, b): AA = A.T @ A bA = b @ A

我试图用numpy.linalg.lstsq解一个跨越几十万到二十万个方程的线性系统,但时间太长了。我能做些什么来加快速度


矩阵稀疏,有数百列(尺寸约为150 000 x 140),系统过于确定

这里有一些即兴的技巧,可以大大加快对指定维度的随机数据的计算速度

不过,我不知道这在数字上听起来有多像

import numpy as np
from time import perf_counter

def lstsq(A, b):
    AA = A.T @ A
    bA = b @ A
    D, U = np.linalg.eigh(AA)
    Ap = (U * np.sqrt(D)).T
    bp = bA @ U / np.sqrt(D)
    return np.linalg.lstsq(Ap, bp, rcond=None)

# create random data
A = np.random.random((150_000, 140))
b = np.random.random((150_000,))

# use solver directly
t = perf_counter()
x, *info = np.linalg.lstsq(A, b, rcond=None)
s = perf_counter()
print('direct method:     ', s-t, 'seconds')
# use equivalent reduced system
t = perf_counter()
x_acc, *info_acc = lstsq(A, b)
s = perf_counter()
print('accelerated method:', s-t, 'seconds')
print('results equal:', np.allclose(x, x_acc))
样本运行:

direct method:      3.032766239999546 seconds
accelerated method: 0.20947745100056636 seconds
results equal: True

如果系数矩阵稀疏,请使用“scipy.sparse.linalg”中的“spsolve”。

请添加更多信息。维度,密集与稀疏,结构…好的,完成了。如果是稀疏的。