[GRASS-dev] Re: [GRASS-user] Compiling addons from svn repository
gianluca massei
g_massa at libero.it
Sat Nov 8 08:02:01 EST 2008
thanks Glynn, I'll try it soon!
gianluca
Glynn Clements ha scritto:
> gianluca massei wrote:
>
>
>>>> thank you for interesting about mcda. I need help and suggest for
>>>> better coding!
>>>>
>>>> - Yes, r.mcda.electre, r.mcda.regime use
>>>> G_alloc_matrix((nrows*ncols),(nrows*ncols)) with related memory
>>>> problem. I'm looking for a better algorithm, especially for pairwise
>>>> comparison that need large matrix ((nrows*ncols),(nrows*ncols)) for
>>>> derive concordance and discordance matrix. Now I don't find it but I'
>>>> still looking for. Could you give me a suggest ?.
>>>>
>>>>
>>> Is this a sparse matrix? Or do you actually store a value for every
>>> possible combination?
>>>
>>> How is the resulting matrix used? If you don't need repeated, random
>>> access, it would be better to calculate the values as they are
>>> required instead of storing them.
>>>
>> I need matrix for storage a pairwise comparison pixel to pixel for
>> generate an index for each row/colum an re-generate the output grid. For
>> avoid the problem I'm tinking storage the value in a file... but It
>> dosen't a smart solution.
>>
>
> Looking at the code, it would appear that you don't need to store the
> entire matrix, only the row/column sums. Something like the following
> (untested):
>
> void build_dominance_matrix(int nrows, int ncols, int ncriteria,
> double *weight_vect, double ***decision_vol)
> {
> int row1, col1, row2, col2;
> int i, j, k, cont;
> double *row_sum_conc = G_alloc_vector(nrows * ncols);
> double *col_sum_conc = G_alloc_vector(nrows * ncols);
> double *row_sum_disc = G_alloc_vector(nrows * ncols);
> double *col_sum_disc = G_alloc_vector(nrows * ncols);
>
> k = 0; /* make pairwise comparation and build concordance/discordance matrix */
> for (row1 = 0; row1 < nrows; row1++) {
> G_percent(row1, nrows, 2);
> for (col1 = 0; col1 < ncols; col1++) {
> j = 0;
> for (row2 = 0; row2 < nrows; row2++) {
> for (col2 = 0; col2 < ncols; col2++) {
> double conc = 0, disc = 0;
> for (i = 0; i < ncriteria; i++) {
> double d = decision_vol[row1][col1][i] - decision_vol[row2][col2][i];
> if (d >= 0)
> conc += weight_vect[i];
> if (d > conc)
> disc = -d;
> }
> row_sum_conc[k] += conc;
> col_sum_conc[j] += conc;
> row_sum_disc[k] += disc;
> col_sum_disc[j] += disc;
>
> j++; /* increase rows index up to nrows*ncols */
> }
> }
> k++; /* increase columns index up to nrows*ncols */
> }
> }
>
> /*calculate concordance and discordance index and storage in decision_vol */
> cont = 0; /*variabile progressiva per riga/colonna della concordance_map */
> for (row1 = 0; row1 < nrows; row1++) {
> G_percent(row1, nrows, 2);
> for (col1 = 0; col1 < ncols; col1++) {
> /* da un valore incrementale ad ogni ciclo per progredire nella concordance_mat */
> decision_vol[row1][col1][ncriteria] = row_sum_conc[cont] - col_sum_conc[cont]; /*fill matrix with concordance index for each DCELL */
> decision_vol[row1][col1][ncriteria + 1] = row_sum_disc[cont] - col_sum_disc[cont]; /*fill matrix with discordance index for each DCELL */
> cont++;
> }
> }
> }
>
>
> ------------------------------------------------------------------------
>
>
> Database dei virus interno non c aggiornato.
> Controllato da AVG - http://www.avg.com
> Versione: 8.0.175 / Database dei virus: 270.8.4/1752 - Data di rilascio: 28/10/2008 10.04
>
>
More information about the grass-dev
mailing list