help-octave
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Critical matrix sparsity


From: siko1056
Subject: Re: Critical matrix sparsity
Date: Thu, 8 Jun 2017 23:49:37 -0700 (PDT)

NJank wrote
> 
> siko1056 wrote
>> If your matrix is really sparse, then the number of columns n should be
>> smaller
>> than the number of rows m (transpose if not). Otherwise you waste space
>> for
>> storing zero columns.
> Maybe a naive side question, but wouldn't it make sense to have the
> transposition automatic and transparent as part of the storage class? A
> "transposed?" flag and the check would be the only overhead.

I don't think it is a naive question, I also thought about it. In my opinion
the programmer should control the sparse matrix orientation, especially in
regard of my second assertion:


siko1056 wrote
> 2. Do I often extract parts of the matrix or insert elements? 
> Randomly extracting or adding parts of a sparse matrix might be a real
> performance killer!

If I construct a sparse matrix and manipulate it occasionally, and despite
this inefficiency, Octave transposes back and forth (because the number of
columns is temporarily below a threshold value) I have a serious not
controllable performance breakdown. So Octave should remain predictive. To
mention this nuance came up to my mind, as I work with matrices like this
one, where it saves about 2/3 space to choose the "right" orientation:

>> typeinfo (A)
ans = sparse matrix
>> size (A)
ans = 2,569,260      7,230
>> nnz(A)
ans =  855,800
>> nnz(A) / prod (size (A)) % less than 1% filled
ans =    4.6071e-05
>> whos A
Variables in the current scope:

   Attr Name         Size                     Bytes  Class
   ==== ====         ====                     =====  =====
        A      2,569,260x7,230                13,834,168  double

Total is 18,575,749,800 elements using 13,834,168 bytes

>> A = A'; size (A)
ans = 7230   2569260

>> whos A
Variables in the current scope:

   Attr Name        Size                     Bytes  Class
   ==== ====        ====                     =====  =====
        A        7,230x2,569,260             34,246,888  double

Total is 18,575,749,800 elements using 34,246,888 bytes

>> spy(A) % as attachment

<http://octave.1599824.n4.nabble.com/file/n4683608/A.png> 

Best,
Kai



--
View this message in context: 
http://octave.1599824.n4.nabble.com/Critical-matrix-sparsity-tp4683603p4683608.html
Sent from the Octave - General mailing list archive at Nabble.com.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]