Mercurial > hg > octave-nkf
diff liboctave/dMatrix.cc @ 3723:4c3774db5b3c
[project @ 2000-10-12 05:10:08 by jwe]
author | jwe |
---|---|
date | Thu, 12 Oct 2000 05:10:09 +0000 |
parents | d9803711e047 |
children | b7d997d593d9 |
line wrap: on
line diff
--- a/liboctave/dMatrix.cc +++ b/liboctave/dMatrix.cc @@ -1873,45 +1873,28 @@ } Matrix -Matrix::cumprod (void) const +Matrix::cumprod (int dim) const { - Matrix retval; - int nr = rows (); int nc = cols (); - - if (nr == 1) + Matrix retval (nr, nc); + + if (nr > 0 && nc >0) { - retval.resize (1, nc); - if (nc > 0) + if ((nr == 1 && dim == 0) || dim == 1) { - double prod = elem (0, 0); - for (int j = 0; j < nc; j++) + for (int i = 0; i < nr; i++) { - retval.elem (0, j) = prod; - if (j < nc - 1) - prod *= elem (0, j+1); + double prod = elem (i, 0); + for (int j = 0; j < nc; j++) + { + retval.elem (0, j) = prod; + if (j < nc - 1) + prod *= elem (i, j+1); + } } } - } - else if (nc == 1) - { - retval.resize (nr, 1); - if (nr > 0) - { - double prod = elem (0, 0); - for (int i = 0; i < nr; i++) - { - retval.elem (i, 0) = prod; - if (i < nr - 1) - prod *= elem (i+1, 0); - } - } - } - else - { - retval.resize (nr, nc); - if (nr > 0 && nc > 0) + else { for (int j = 0; j < nc; j++) { @@ -1929,45 +1912,28 @@ } Matrix -Matrix::cumsum (void) const +Matrix::cumsum (int dim) const { - Matrix retval; - int nr = rows (); int nc = cols (); - - if (nr == 1) + Matrix retval (nr, nc); + + if (nr > 0 && nc > 0) { - retval.resize (1, nc); - if (nc > 0) + if ((nr == 1 && dim == 0) || dim == 1) { - double sum = elem (0, 0); - for (int j = 0; j < nc; j++) + for (int i = 0; i < nr; i++) { - retval.elem (0, j) = sum; - if (j < nc - 1) - sum += elem (0, j+1); + double sum = elem (i, 0); + for (int j = 0; j < nc; j++) + { + retval.elem (i, j) = sum; + if (j < nc - 1) + sum += elem (i, j+1); + } } } - } - else if (nc == 1) - { - retval.resize (nr, 1); - if (nr > 0) - { - double sum = elem (0, 0); - for (int i = 0; i < nr; i++) - { - retval.elem (i, 0) = sum; - if (i < nr - 1) - sum += elem (i+1, 0); - } - } - } - else - { - retval.resize (nr, nc); - if (nr > 0 && nc > 0) + else { for (int j = 0; j < nc; j++) { @@ -1985,129 +1951,125 @@ } Matrix -Matrix::prod (void) const +Matrix::prod (int dim) const { Matrix retval; int nr = rows (); int nc = cols (); - if (nr == 1) + if (nr > 0 && nc > 0) { - retval.resize (1, 1); - retval.elem (0, 0) = 1.0; - for (int j = 0; j < nc; j++) - retval.elem (0, 0) *= elem (0, j); - } - else if (nc == 1) - { - retval.resize (1, 1); - retval.elem (0, 0) = 1.0; - for (int i = 0; i < nr; i++) - retval.elem (0, 0) *= elem (i, 0); + if ((nr == 1 && dim == 0) || dim == 1) + { + retval.resize(nr, 1); + for (int i = 0; i < nr; i++) + { + retval.elem (i, 0) = 1.0; + for (int j = 0; j < nc; j++) + retval.elem (i, 0) *= elem (i, j); + } + } + else + { + retval.resize (1, nc); + for (int j = 0; j < nc; j++) + { + retval.elem (0, j) = 1.0; + for (int i = 0; i < nr; i++) + retval.elem (0, j) *= elem (i, j); + } + } } else { - if (nc == 0) - { - retval.resize (1, 1); - retval.elem (0, 0) = 1.0; - } - else - retval.resize (1, nc); - - for (int j = 0; j < nc; j++) - { - retval.elem (0, j) = 1.0; - for (int i = 0; i < nr; i++) - retval.elem (0, j) *= elem (i, j); - } + retval.resize (1, 1); + retval.elem (0, 0) = 1.0; } + return retval; } Matrix -Matrix::sum (void) const +Matrix::sum (int dim) const { Matrix retval; int nr = rows (); int nc = cols (); - if (nr == 1) + if (nr > 0 && nc > 0) { - retval.resize (1, 1); - retval.elem (0, 0) = 0.0; - for (int j = 0; j < nc; j++) - retval.elem (0, 0) += elem (0, j); + if ((nr == 1 && dim == 0) || dim == 1) + { + retval.resize (nr, 1); + for (int i = 0; i < nr; i++) + { + retval.elem (i, 0) = 0.0; + for (int j = 0; j < nc; j++) + retval.elem (i, 0) += elem (i, j); + } + } + else + { + retval.resize (1, nc); + for (int j = 0; j < nc; j++) + { + retval.elem (0, j) = 0.0; + for (int i = 0; i < nr; i++) + retval.elem (0, j) += elem (i, j); + } + } } - else if (nc == 1) + else { retval.resize (1, 1); retval.elem (0, 0) = 0.0; - for (int i = 0; i < nr; i++) - retval.elem (0, 0) += elem (i, 0); - } - else - { - if (nc == 0) - { - retval.resize (1, 1); - retval.elem (0, 0) = 0.0; - } - else - retval.resize (1, nc); - - for (int j = 0; j < nc; j++) - { - retval.elem (0, j) = 0.0; - for (int i = 0; i < nr; i++) - retval.elem (0, j) += elem (i, j); - } } return retval; } Matrix -Matrix::sumsq (void) const +Matrix::sumsq (int dim) const { Matrix retval; int nr = rows (); int nc = cols (); - if (nr == 1) + if (nr > 0 && nc > 0) { - retval.resize (1, 1); - retval.elem (0, 0) = 0.0; - for (int j = 0; j < nc; j++) + if ((nr == 1 && dim == 0) || dim == 1) { - double d = elem (0, j); - retval.elem (0, 0) += d * d; + retval.resize (nr, 1); + for (int i = 0; i < nr; i++) + { + retval.elem (i, 0) = 0.0; + for (int j = 0; j < nc; j++) + { + double d = elem (i, j); + retval.elem (i, 0) += d * d; + } + } } - } - else if (nc == 1) - { - retval.resize (1, 1); - retval.elem (0, 0) = 0.0; - for (int i = 0; i < nr; i++) + else { - double d = elem (i, 0); - retval.elem (0, 0) += d * d; + retval.resize (1, nc); + for (int j = 0; j < nc; j++) + { + retval.elem (0, j) = 0.0; + for (int i = 0; i < nr; i++) + { + double d = elem (i, j); + retval.elem (0, j) += d * d; + } + } } } else { - retval.resize (1, nc); - for (int j = 0; j < nc; j++) - { - retval.elem (0, j) = 0.0; - for (int i = 0; i < nr; i++) - { - double d = elem (i, j); - retval.elem (0, j) += d * d; - } - } + retval.resize (1, 1); + retval.elem (0, 0) = 0.0; } return retval; }