Hi, Vincent,

Thanks for your reply. I will try it following your suggestion.

Best

Huayi 
 
 
------------------ Original ------------------
From:  "Vincent Delecroix"<20100.delecr...@gmail.com>;
Date:  Wed, May 20, 2015 03:55 PM
To:  "sage-support"<sage-support@googlegroups.com>; 

Subject:  Re: [sage-support] method to get the left-lower and 
right-uppertriangular parts of a matrix

 
Hi,

On 20/05/15 08:54, Huayi Wei wrote:
> Hi, Vincent,
>
> Yes, my matrix is sparse.  I just move here from matlab, so I am a
> newbie for sage and python.
>
> The function you have offered can do the job. But I am worried about its
> efficiency, because my sparse matrix
> maybe very large which comes from Finite Element method.

The function I gave is not so bad, because if you have a sparse matrix 
accessing to a row (or even a slice of a row) gives you a sparse vector:

sage: m = matrix(100, sparse=True)
sage: v = m[5,5:]
sage: v.is_sparse()
True

Thouh I am not sure about the efficiency of

sage: m[5,5:] = v

when m is a sparse matrix and v a sparse vector. I quickly look at the 
code and it seems to run through all entries of v which is very stupid.

> So about the efficient ways for  sparse matrix, can you give me some
> suggestion?  Thanks very much.

If your matrix is sparse I would do

def triu(m):
     t = matrix(m.base_ring(), m.nrows(), sparse=True)
     for (i,j) in m.nonzero_positions():
         if i <= j:
             t[i,j] = m[i,j]
     return t

Depending whether you want the diagonal or not you have to adjust the 
inequality for being strict or not.

Best,
Vincent

-- 
You received this message because you are subscribed to the Google Groups 
"sage-support" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to sage-support+unsubscr...@googlegroups.com.
To post to this group, send email to sage-support@googlegroups.com.
Visit this group at http://groups.google.com/group/sage-support.
For more options, visit https://groups.google.com/d/optout.

-- 
You received this message because you are subscribed to the Google Groups 
"sage-support" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to sage-support+unsubscr...@googlegroups.com.
To post to this group, send email to sage-support@googlegroups.com.
Visit this group at http://groups.google.com/group/sage-support.
For more options, visit https://groups.google.com/d/optout.

Reply via email to