您可以使用稀疏矩阵A存储T_Arm的(5,2)项在其对角线上,并求解AX = b,其中b是由堆积条目Erg
组成的向量。然后用scipy.sparse.linalg.lsqr(A,b)解决系统问题。
为了构建A和B我使用n = 3的用于可视化目的:
import numpy as np
import scipy
from scipy.sparse import bsr_matrix
n = 3
col = np.hstack(5 * [np.arange(10 * n/5).reshape(n, 2)]).flatten()
array([ 0., 1., 0., 1., 0., 1., 0., 1., 0., 1., 2., 3., 2.,
3., 2., 3., 2., 3., 2., 3., 4., 5., 4., 5., 4., 5.,
4., 5., 4., 5.])
row = np.tile(np.arange(10 * n/2), (2, 1)).T.flatten()
array([ 0., 0., 1., 1., 2., 2., 3., 3., 4., 4., 5.,
5., 6., 6., 7., 7., 8., 8., 9., 9., 10., 10.,
11., 11., 12., 12., 13., 13., 14., 14.])
A = bsr_matrix((T_Arm[:n].flatten(), (row, col)), shape=(5 * n, 2 * n))
A.toarray()
array([[ 0, 1, 0, 0, 0, 0],
[ 2, 3, 0, 0, 0, 0],
[ 4, 5, 0, 0, 0, 0],
[ 6, 7, 0, 0, 0, 0],
[ 8, 9, 0, 0, 0, 0],
[ 0, 0, 10, 11, 0, 0],
[ 0, 0, 12, 13, 0, 0],
[ 0, 0, 14, 15, 0, 0],
[ 0, 0, 16, 17, 0, 0],
[ 0, 0, 18, 19, 0, 0],
[ 0, 0, 0, 0, 20, 21],
[ 0, 0, 0, 0, 22, 23],
[ 0, 0, 0, 0, 24, 25],
[ 0, 0, 0, 0, 26, 27],
[ 0, 0, 0, 0, 28, 29]], dtype=int64)
b = Erg[:n].flatten()
然后
scipy.sparse.linalg.lsqr(A, b)[0]
array([ 5.00000000e-01, -1.39548109e-14, 5.00000000e-01,
8.71088538e-16, 5.00000000e-01, 2.35398726e-15])
编辑:因为它似乎A没有在存储器中作为巨大:多个上块稀疏矩阵here。
什么是'Inputlen'?是'n'吗? – TuanDT
n是等式系统的数目,等于Inputlen,我更正了代码 – Okapi575
,我认为它应该是'xrange(n)'而不是'xrange(len(n))',因为'n'只是一个整数(100在这种情况下) – TuanDT