bugGNU Octave - Bugs: bug #41799, Example sparse matrix created in...

 
 

bug #41799: Example sparse matrix created in oct-file with 0 index

Submitted by:  David Spies <dspyz>
Submitted on:  Fri 07 Mar 2014 03:52:16 AM UTC  
 
Category: DocumentationSeverity: 3 - Normal
Priority: 5 - NormalItem Group: Documentation
Status: FixedAssigned to: None
Originator Name: Open/Closed: Closed
Release: devOperating System: Any

Add a New Comment(Rich Markup)
   

You are not logged in

Please log in, so followups can be emailed to you.

 

(Jump to the original submission Jump to the original submission)

Tue 10 Jun 2014 08:06:33 AM UTC, comment #8:

OK, I'll prepare a patch with the changes you suggest to the docs.
c.

Carlo de Falco <cdf>
Project Member
Mon 09 Jun 2014 05:36:01 AM UTC, comment #7:

Overall, I think the sparse documentation could be enhanced. I did a bit of that, increasing the number of seealso links between related sparse functions, in this changeset (http://hg.savannah.gnu.org/hgweb/octave/rev/53af80da6781). For this case, I think it would be good to write up your code usage as a second version of case #1, explaining that it is more efficient than the implementation with ColumnVectors (4 bytes rather than 8 bytes per index), but that it still suffers from the problem of duplicate values in memory at the same time.

Rik <rik5>
Project Administrator
Thu 05 Jun 2014 11:27:57 AM UTC, comment #6:

Rik,

It is true that building the sparse matrix from
aij format requires data duplication, nevertheless
that is THE most common way to assemble a sparse matrix,
AND it is the recommended way in most sparse linear algebra
packages including, e.g., UMFPACK, MUMPS, LIS, PETSC, etc.

While writing CSC data directly avoids this data duplication
it is ofte EXTREMELY inconvenient when matrix elements are
accessed randomly rather than in a given order.

Most often, as for example for circuit simulators, FEM or FVM solvers etc. matrix elements are given with repetitions and
repeated elements are to be added. Actually in my experience this is THE most common use of sparse matrices.

Therefore, if the first approach in the manual is not the most
recommended, it should actually be as it is the most convenient for most applications I know of.

This said, it is true that the approach with indices in ColumnVector objects is more similar to what is done in m-files,
yet it differs from the other two approaches shown in the same
manual page, which use 0-based indices, which I think could
be confusing ...

c.

Carlo de Falco <cdf>
Project Member
Thu 05 Jun 2014 12:22:52 AM UTC, comment #5:

The manual lists 3 different ways of creating a sparse matrix. The first method listed, which has the problem code, is actually not even recommended for significant usage. The issue is that two copies of the matrix will exist which doubles the host memory requirement. So, in practice, method 1 should only be used for small problems. If it is only being used for small problems, then I think it is better to emphasize code readability rather than performance. In this case, creating a sparse matrix in an oct-file looks pretty much like writing the same code in an m-file. The C++ code looks very much like the following Octave code.

versus

Rik <rik5>
Project Administrator
Wed 04 Jun 2014 01:50:18 AM UTC, comment #4:

Rik,

Why do you think it is better to suggest

for the indices, which requires casting indices
to double then back to octave_idx_type?

Isn't it better to use

directly?

AFAICS, the Sparse constructor that accepts
Array objects assumes they are 0-based.

c.

Carlo de Falco <cdf>
Project Member
Tue 03 Jun 2014 09:43:06 PM UTC, comment #3:

I fixed the documentation on the stable branch in this changeset (http://hg.savannah.gnu.org/hgweb/octave/rev/96f22d6674c4). The problem was that the row and column indices were assumed to be zero-based, while the SparseMatrix constructor assumes ordinary Octave idx_vectors which are 1-based.

Rik <rik5>
Project Administrator
Fri 07 Mar 2014 08:52:26 AM UTC, comment #2:

Sorry for the typos in the previous post,
it seems posts cannot be edited so I rewriting
it to correct it.

Actually I think these lines in the example:

should be changed to

does the example work for you with this change?

Carlo de Falco <cdf>
Project Member
Fri 07 Mar 2014 07:40:39 AM UTC, comment #1:

Actually I think these lines in the example:

should be changed to

does the example work for you with this change?

Carlo de Falco <cdf>
Project Member
Fri 07 Mar 2014 03:52:16 AM UTC, original submission:

In the example for how to create a sparse matrix in an oct-file from 3 vectors (here: http://www.gnu.org/software/octave/doc/interpreter/Creating-Sparse-Matrices-in-Oct_002dFiles.html#Creating-Sparse-Matrices-in-Oct_002dFiles )

some of the indices are zero. But in fact the sparse-matrix constructor takes in 1-indexed column vectors for row and column.

Imitating this example gives the standard "indices must be positive integers" error.

David Spies <dspyz>

 

(Note: upload size limit is set to 16384 kB, after insertion of the required escape characters.)

Attach File(s):
   
   
Comment:
   

No files currently attached

 

Depends on the following items: None found

Items that depend on this one: None found

 

Carbon-Copy List
  • -unavailable- added by rik5 (Posted a comment)
  • -unavailable- added by cdf (Posted a comment)
  • -unavailable- added by dspyz (Submitted the item)
  •  

    Do you think this task is very important?
    If so, you can click here to add your encouragement to it.
    This task has 0 encouragements so far.

    Only project members can vote.

     

    Please enter the title of George Orwell's famous dystopian book (it's a date):

     

     

    Follow 2 latest changes.

    Date Changed By Updated Field Previous Value => Replaced By
    Tue 03 Jun 2014 09:43:06 PM UTCrik5StatusNone=>Fixed
      Open/ClosedOpen=>Closed

    Back to the top


    Powered by Savane 3.1-cleanup1