Sorry if I came off a bit harsh in my previous mail. I had a quick look at your code; I can tell you what the problem is, but I cannot tell you how to solve as I don't know what your code is supposed to do and I don't know the SparseMatrix class very well (perhaps other people on the list can help).
Basically 'a(i, b.xridx(k))' (the first argument to the 'calc_tnorm' call) gives you problems as this actually creates an element in the matrix, which is not what you want. Now you could avoid this by declaring 'a' and 'b' as being constant. This does, however, not work in your case as you are calling the 'xridx' function which is non-const. Not sure what the solution is as that depends on what you actually want to accomplish. Søren man, 27 12 2010 kl. 20:12 +0100, skrev w4nderlust: > Sorry for everything, i'm attaching the full code. > to compile i simply did call: > mkoctfile spmaxmin_ST.cc > and to run it i reated 2 sparse matrices A and B and then: > tic; spmaxmin_ST(A, B); toc; > > > > 2010/12/27 Søren Hauberg <[email protected]>: > > 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
