Hi
Some practical comments:
* Please keep the list CC'ed (press reply to all) instead of just
sending me a private mail; that way others can help.
* If you send code, please send ALL relevant code. The code you
send does NOT compile (you have not included relevant headers,
defined HELP or NUM_ARG and you have not declared calc_tnorm).
* Please send the code as an attached file so that we don't have
to copy go through the trouble of creating a new file and
copying the contents of an e-mail to this file (this is relevant
not only to make our lives easier, but also to keep the
encoding).
* Please tell us what you did to compile the code.
* Please tell us what you did to run the code.
Søren
man, 27 12 2010 kl. 15:54 +0100, skrev w4nderlust:
> I did that because it was suggested in the api manual.
> Anyway, if i remove it it compiles, but when i run it in octave i get
> this error:
> error: Sparse::SparseRep::elem (octave_idx_type, octave_idx_type): sparse
> matri
> x filled
>
> here's the full code:
>
> DEFUN_DLD (spmaxmin_ST, args, nargout, HELP)
>
> {
>
> if (args.length() != NUM_ARG)
>
> print_usage();
>
> else
>
> {
>
> SparseMatrix a = args(0).sparse_matrix_value();
>
> SparseMatrix b = args(1).sparse_matrix_value();
>
> dim_vector dimsA = a.dims();
>
> int rowsA = dimsA(0);
>
> int colsA = dimsA(1);
>
>
>
> dim_vector dimsB = b.dims();
>
> int rowsB = dimsB(0);
>
> int colsB = dimsB(1);
>
>
>
> SparseMatrix c = SparseMatrix(rowsA, colsB, rowsA*colsB);
>
> dim_vector dimsC = c.dims();
>
> int rowsC = dimsC(0);
>
> int colsC = dimsC(1);
>
>
>
> //const SparseMatrix tmp(c);
>
> int i,j,k;
>
> double mx,mn;
>
> if (colsA != rowsB)
>
> print_usage();
>
> else
>
> {
>
> for (i = 0; i < rowsC; i++)
>
> {
>
> for(j = 0; j < colsC; j++)
>
> {
>
> mx = 0;
>
> for (k = b.cidx(j); k <= (b.cidx(j+1) -
> 1); k++)
>
> {
>
> mn = calc_tnorm(a(i,
> b.ridx(k)), b.data(k));
>
> if (mn > mx)
>
> mx = mn;
>
> }
>
> if (mx != 0)
>
> c(i, j) = mx;
>
> }
>
> }
>
> c.maybe_compress();
>
> return octave_value(c);
>
> }
>
> }
>
> }
>
>
>
> 2010/12/27 Søren Hauberg <[email protected]>:
> > man, 27 12 2010 kl. 15:37 +0100, skrev w4nderlust:
> >> Hello everyone.
> >> Compiling an octfile i'm experiencing a compile error.
> >> spmaxmin_ST.cc:62: error: lvalue required as left operand of assignment
> >>
> >> that's how my code works:
> >> //i create a sparse matrix
> >> SparseMatrix c = SparseMatrix(rowsA, colsB, rowsA*colsB);
> >>
> >> //i create a constart temp matrix as suggested in the documentation
> >> const SparseMatrix tmp(c);
> >>
> >> //somewhere in my code i do
> >> if (mx != 0)
> >>
> >> tmp(i, j) = mx;
> >> //mx is a double and it is initialized
> >>
> >> the problem is:
> >> tmp(i, j) = mx;
> >>
> >> i don't know what's wrong because in the documentation there are a lot
> >> of examples with this way of accessing the matrix...
> >> Can someone please help me?
> >
> > I don't know the sparse matrix API that well, but it looks like you have
> > declared a constant matrix tmp (constant means that it will not be
> > changed during the rest of the program). You then alter this matrix (by
> > 'tmp(i, j) = mx'), which is not possible if the matrix is constant. I
> > don't know this trick with the constant temp matrix, but it seems like
> > that is the source of your troubles.
> >
> > Søren
> >
> >
------------------------------------------------------------------------------
Learn how Oracle Real Application Clusters (RAC) One Node allows customers
to consolidate database storage, standardize their database environment, and,
should the need arise, upgrade to a full multi-node Oracle RAC database
without downtime or disruption
http://p.sf.net/sfu/oracle-sfdevnl
_______________________________________________
Octave-dev mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/octave-dev