See the documentation: https://docs.scipy.org/doc/scipy/reference/generated/scipy.sparse.linalg.SuperLU.html
As you can see there it computes permutation matrices Pr and Pc and lower and upper triangular matrices L,U such that Pr*A*Pc = L*U so it's not computing a normal LU decomposition of a PLU decomposition: it's doing both row- and column permutations on A; presumably to condition it to get a more numerically stable L,U. It's a different decomposition. You may be able to solve similar problems with it, but you'll have to expose the computed data to the user. I don't think it's suitable for wrapping as a normal LU-decomposition, as it won't be a drop-in substitute for it. You do get A = Pr^(-1) *L*U * Pc^(-1) On Tuesday 27 February 2024 at 10:02:19 UTC-8 Animesh Shree wrote: > Sorry for multiple messages > > I just want to say > > >sage: p,l,u = a.LU(force=True) > >sage: p > >{'perm_r': [1, 0], 'perm_c': [1, 0]} > > It ( {'perm_r': [1, 0], 'perm_c': [1, 0]} ) represents transpose and > it cannot be represented as permutation matrix. > Similar cases may arise for other matrices. > > On Tuesday, February 27, 2024 at 11:29:44 PM UTC+5:30 Animesh Shree wrote: > >> For transpose : >> >> In the example we can see permutations are provided as arrays for rows >> and cols. >> The permutation is equivalent of taking transpose of matrix. >> But we cant represent transpose as a permutation matrix. >> >> >> >>> a = np.matrix([[1,2],[3,5]]) >> >>> # a * perm = a.T >> >>> # perm = a.I * a.T >> >>> a.I*a.T >> matrix([[-1., -5.], >> [ 1., 4.]]) >> >>> >> >> the output is not permutation matrix. >> >> On Tuesday, February 27, 2024 at 10:03:25 PM UTC+5:30 Dima Pasechnik >> wrote: >> >>> >>> >>> On 27 February 2024 15:34:20 GMT, 'Animesh Shree' via sage-devel < >>> sage-...@googlegroups.com> wrote: >>> >I tried scipy which uses superLU. We get the result but there is little >>> bit >>> >of issue. >>> > >>> > >>> >--For Dense-- >>> >The dense matrix factorization gives this output using permutation >>> matrix >>> >sage: a = Matrix(RDF, [[1, 0],[2, 1]], sparse=True) >>> >sage: a >>> >[1.0 0.0] >>> >[2.0 1.0] >>> >sage: p,l,u = a.dense_matrix().LU() >>> >sage: p >>> >[0.0 1.0] >>> >[1.0 0.0] >>> >sage: l >>> >[1.0 0.0] >>> >[0.5 1.0] >>> >sage: u >>> >[ 2.0 1.0] >>> >[ 0.0 -0.5] >>> > >>> >>> you'd probably want to convert the permutation matrix into a >>> permutation. >>> >>> >>> >--For Sparse-- >>> >But the scipy LU decomposition uses permutations which involves taking >>> >transpose, also the output permutations are represented as array. >>> >>> It is very normal to represent permutations as arrays. >>> One can reconstruct the permutation matrix from such an array trivially >>> (IIRC, Sage even has a function for it) >>> >>> I am not sure what you mean by "taking transpose". >>> >>> >sage: p,l,u = a.LU(force=True) >>> >sage: p >>> >{'perm_r': [1, 0], 'perm_c': [1, 0]} >>> >sage: l >>> >[1.0 0.0] >>> >[0.0 1.0] >>> >sage: u >>> >[1.0 2.0] >>> >[0.0 1.0] >>> > >>> > >>> >Shall I continue with this? >>> >>> sure, you are quite close to getting it all done it seems. >>> >>> >>> >On Tuesday, February 6, 2024 at 11:29:07 PM UTC+5:30 Dima Pasechnik >>> wrote: >>> > >>> >> Non-square case for LU is in fact easy. Note that if you have A=LU as >>> >> a block matrix >>> >> A11 A12 >>> >> A21 A22 >>> >> >>> >> then its LU-factors L and U are >>> >> L11 0 and U11 U12 >>> >> L21 L22 0 U22 >>> >> >>> >> and A11=L11 U11, A12=L11 U12, A21=L21 U11, A22=L21 U12+L22 U22 >>> >> >>> >> Assume that A11 is square and full rank (else one may apply >>> >> permutations of rows and columns in the usual way). while A21=0 and >>> >> A22=0. Then one can take L21=0, L22=U22=0, while A12=L11 U12 >>> >> implies U12=L11^-1 A12. >>> >> That is, we can first compute LU-decomposition of a square matrix >>> A11, >>> >> and then compute U12 from it and A. >>> >> >>> >> Similarly, if instead A12=0 and A22=0, then we can take U12=0, >>> >> L22=U22=0, and A21=L21 U11, >>> >> i.e. L21=A21 U11^-1, and again we compute LU-decomposition of A11, >>> and >>> >> then L21=A21 U11^-1. >>> >> >>> >> ---------------- >>> >> >>> >> Note that in some cases one cannot get LU, but instead must go for an >>> >> PLU,with P a permutation matrix. >>> >> For non-square matrices this seems a bit more complicated, but, well, >>> >> still doable. >>> >> >>> >> HTH >>> >> Dima >>> >> >>> >> >>> >> >>> >> >>> >> On Mon, Feb 5, 2024 at 6:00 PM Nils Bruin <nbr...@sfu.ca> wrote: >>> >> > >>> >> > On Monday 5 February 2024 at 02:31:04 UTC-8 Dima Pasechnik wrote: >>> >> > >>> >> > >>> >> > it is the matter of adding extra zero rows or columns to the matrix >>> you >>> >> want to decompose. This could be a quick fix. >>> >> > >>> >> > (in reference to computing LU decompositions of non-square >>> matrices) -- >>> >> in a numerical setting, adding extra zero rows/columns may not be >>> such an >>> >> attractive option: if previously you know you had a maximal rank >>> matrix, >>> >> you have now ruined it by the padding. It's worth checking the >>> >> documentation and literature if padding is appropriate/desirable for >>> the >>> >> target algorithm/implementation. >>> >> > >>> >> > -- >>> >> > You received this message because you are subscribed to the Google >>> >> Groups "sage-devel" group. >>> >> > To unsubscribe from this group and stop receiving emails from it, >>> send >>> >> an email to sage-devel+...@googlegroups.com. >>> >> > To view this discussion on the web visit >>> >> >>> https://groups.google.com/d/msgid/sage-devel/622a01e0-9197-40c5-beda-92729c4e4a32n%40googlegroups.com >>> >>> >> . >>> >> >>> > >>> >> -- You received this message because you are subscribed to the Google Groups "sage-devel" group. To unsubscribe from this group and stop receiving emails from it, send an email to sage-devel+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/sage-devel/1086ad7e-447e-4be8-9b1f-8724ad80d7cbn%40googlegroups.com.