[Top][All Lists]

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

Re: Critical matrix sparsity

From: Nicholas Jankowski
Subject: Re: Critical matrix sparsity
Date: Fri, 9 Jun 2017 06:27:41 -0400

On Jun 9, 2017 3:05 AM, "siko1056" <address@hidden> wrote:
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



Perhaps it would be a decision on sparse matrix creation only to avoid the continued reflipping possibility.

reply via email to

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