From octave-sources-request at bevo dot che dot wisc dot edu Mon Jan 15 17:11:15 2001 Subject: Re: Odd sum() behavior From: "Cai Jianming" To: Cc: , , "Douglas Eck" Date: Tue, 16 Jan 2001 07:08:42 +0800 This is a multi-part message in MIME format. ------=_NextPart_000_0015_01C07F8B.28BC88C0 Content-Type: multipart/alternative; boundary="----=_NextPart_001_0016_01C07F8B.28C5B080" ------=_NextPart_001_0016_01C07F8B.28C5B080 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Hi, The attached patch will solve the "odd sum" behaviour. The problem = was that there was a misunderstanding of what "dim" means. In fact, dim=3D0 means no arguments, i.e. sum(x) dim=3D1 means sum(x,1) dim=3D2 means sum(x,2) The patch changes: liboctave/dMatrix.cc, liboctave/CMatrix.cc, = src/data.cc Regards, Jianming ------=_NextPart_001_0016_01C07F8B.28C5B080 Content-Type: text/html; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable
Hi,
   The attached patch will = solve the "odd=20 sum" behaviour. The problem was that there was a misunderstanding of = what "dim"=20 means. In fact,
  dim=3D0 means no arguments, i.e. = sum(x)
  dim=3D1 means = sum(x,1)
  dim=3D2 means = sum(x,2)
 
   The patch changes:=20 liboctave/dMatrix.cc, liboctave/CMatrix.cc, src/data.cc
 
Regards,
Jianming
 
 
 
 
------=_NextPart_001_0016_01C07F8B.28C5B080-- ------=_NextPart_000_0015_01C07F8B.28BC88C0 Content-Type: application/octet-stream; name="reduction_dim.patch" Content-Transfer-Encoding: quoted-printable Content-Disposition: attachment; filename="reduction_dim.patch" *** octave-2.1.33/liboctave/CMatrix.cc Mon Jan 15 20:06:32 2001=0A= --- octave-2.1.33.orig/liboctave/CMatrix.cc Sun Jan 7 18:49:36 2001=0A= *************** ComplexMatrix::cumprod (int dim) const=0A= *** 2347,2353 ****=0A= ComplexMatrix retval (nr, nc);=0A= if (nr > 0 && nc > 0)=0A= {=0A= ! if ((nr =3D=3D 1 && dim =3D=3D 0) || dim =3D=3D 2)=0A= {=0A= for (int i =3D 0; i < nr; i++)=0A= {=0A= --- 2347,2353 ----=0A= ComplexMatrix retval (nr, nc);=0A= if (nr > 0 && nc > 0)=0A= {=0A= ! if ((nr =3D=3D 1 && dim =3D=3D 0) || dim =3D=3D 1)=0A= {=0A= for (int i =3D 0; i < nr; i++)=0A= {=0A= *************** ComplexMatrix::cumsum (int dim) const=0A= *** 2385,2391 ****=0A= ComplexMatrix retval (nr, nc);=0A= if (nr > 0 && nc > 0)=0A= {=0A= ! if ((nr =3D=3D 1 && dim =3D=3D 0) || dim =3D=3D 2)=0A= {=0A= for (int i =3D 0; i < nr; i++)=0A= {=0A= --- 2385,2391 ----=0A= ComplexMatrix retval (nr, nc);=0A= if (nr > 0 && nc > 0)=0A= {=0A= ! if ((nr =3D=3D 1 && dim =3D=3D 0) || dim =3D=3D 1)=0A= {=0A= for (int i =3D 0; i < nr; i++)=0A= {=0A= *************** ComplexMatrix::prod (int dim) const=0A= *** 2423,2429 ****=0A= ComplexMatrix retval;=0A= if (nr > 0 && nc > 0)=0A= {=0A= ! if ((nr =3D=3D 1 && dim =3D=3D 0) || dim =3D=3D 2)=0A= {=0A= retval.resize(nr, 1);=0A= for (int i =3D 0; i < nr; i++)=0A= --- 2423,2429 ----=0A= ComplexMatrix retval;=0A= if (nr > 0 && nc > 0)=0A= {=0A= ! if ((nr =3D=3D 1 && dim =3D=3D 0) || dim =3D=3D 1)=0A= {=0A= retval.resize(nr, 1);=0A= for (int i =3D 0; i < nr; i++)=0A= *************** ComplexMatrix::sum (int dim) const=0A= *** 2460,2466 ****=0A= ComplexMatrix retval;=0A= if (nr > 0 && nc > 0)=0A= {=0A= ! if ((nr =3D=3D 1 && dim =3D=3D 0) || dim =3D=3D 2)=0A= {=0A= retval.resize (nr, 1);=0A= for (int i =3D 0; i < nr; i++)=0A= --- 2460,2466 ----=0A= ComplexMatrix retval;=0A= if (nr > 0 && nc > 0)=0A= {=0A= ! if ((nr =3D=3D 1 && dim =3D=3D 0) || dim =3D=3D 1)=0A= {=0A= retval.resize (nr, 1);=0A= for (int i =3D 0; i < nr; i++)=0A= *************** ComplexMatrix::sumsq (int dim) const=0A= *** 2497,2503 ****=0A= ComplexMatrix retval;=0A= if (nr > 0 && nc > 0)=0A= {=0A= ! if ((nr =3D=3D 1 && dim =3D=3D 0) || dim =3D=3D 2)=0A= {=0A= retval.resize (nr, 1);=0A= for (int i =3D 0; i < nr; i++)=0A= --- 2497,2503 ----=0A= ComplexMatrix retval;=0A= if (nr > 0 && nc > 0)=0A= {=0A= ! if ((nr =3D=3D 1 && dim =3D=3D 0) || dim =3D=3D 1)=0A= {=0A= retval.resize (nr, 1);=0A= for (int i =3D 0; i < nr; i++)=0A= *** octave-2.1.33/src/data.cc Mon Jan 15 20:08:14 2001=0A= --- octave-2.1.33.orig/src/data.cc Sat Dec 23 23:12:15 2000=0A= *************** and at var{x} dot The result is in range -pi=0A= *** 261,271 ****=0A= { \=0A= octave_value arg =3D args(0); \=0A= \=0A= ! int dim =3D (nargin =3D=3D 1 ? 0 : args(1).int_value (true)); \=0A= \=0A= if (! error_state) \=0A= { \=0A= ! if (dim =3D=3D 0 || dim =3D=3D 1 || dim =3D=3D 2) \=0A= { \=0A= if (arg.is_real_type ()) \=0A= { \=0A= --- 261,271 ----=0A= { \=0A= octave_value arg =3D args(0); \=0A= \=0A= ! int dim =3D (nargin =3D=3D 1 ? 0 : args(1).int_value (true) - = 1); \=0A= \=0A= if (! error_state) \=0A= { \=0A= ! if (dim =3D=3D 0 || dim =3D=3D 1) \=0A= { \=0A= if (arg.is_real_type ()) \=0A= { \=0A= *************** and at var{x} dot The result is in range -pi=0A= *** 288,294 ****=0A= } \=0A= } \=0A= else \=0A= ! error (#FCN ": invalid dimension argument =3D %d", dim); \=0A= } \=0A= } \=0A= else \=0A= --- 288,294 ----=0A= } \=0A= } \=0A= else \=0A= ! error (#FCN ": invalid dimension argument =3D %d", dim + 1); \=0A= } \=0A= } \=0A= else \=0A= *** octave-2.1.33/liboctave/dMatrix.cc Mon Jan 15 20:06:11 2001=0A= --- octave-2.1.33.orig/liboctave/dMatrix.cc Sun Jan 7 18:49:36 2001=0A= *************** Matrix::cumprod (int dim) const=0A= *** 1891,1897 ****=0A= =0A= if (nr > 0 && nc >0)=0A= {=0A= ! if ((nr =3D=3D 1 && dim =3D=3D 0) || dim =3D=3D 2)=0A= {=0A= for (int i =3D 0; i < nr; i++)=0A= {=0A= --- 1891,1897 ----=0A= =0A= if (nr > 0 && nc >0)=0A= {=0A= ! if ((nr =3D=3D 1 && dim =3D=3D 0) || dim =3D=3D 1)=0A= {=0A= for (int i =3D 0; i < nr; i++)=0A= {=0A= *************** Matrix::cumsum (int dim) const=0A= *** 1930,1936 ****=0A= =0A= if (nr > 0 && nc > 0)=0A= {=0A= ! if ((nr =3D=3D 1 && dim =3D=3D 0) || dim =3D=3D 2)=0A= {=0A= for (int i =3D 0; i < nr; i++)=0A= {=0A= --- 1930,1936 ----=0A= =0A= if (nr > 0 && nc > 0)=0A= {=0A= ! if ((nr =3D=3D 1 && dim =3D=3D 0) || dim =3D=3D 1)=0A= {=0A= for (int i =3D 0; i < nr; i++)=0A= {=0A= *************** Matrix::prod (int dim) const=0A= *** 1970,1976 ****=0A= =0A= if (nr > 0 && nc > 0)=0A= {=0A= ! if ((nr =3D=3D 1 && dim =3D=3D 0) || dim =3D=3D 2)=0A= {=0A= retval.resize(nr, 1);=0A= for (int i =3D 0; i < nr; i++)=0A= --- 1970,1976 ----=0A= =0A= if (nr > 0 && nc > 0)=0A= {=0A= ! if ((nr =3D=3D 1 && dim =3D=3D 0) || dim =3D=3D 1)=0A= {=0A= retval.resize(nr, 1);=0A= for (int i =3D 0; i < nr; i++)=0A= *************** Matrix::sum (int dim) const=0A= *** 2010,2016 ****=0A= =0A= if (nr > 0 && nc > 0)=0A= {=0A= ! if ((nr =3D=3D 1 && dim =3D=3D 0) || dim =3D=3D 2)=0A= {=0A= retval.resize (nr, 1);=0A= for (int i =3D 0; i < nr; i++)=0A= --- 2010,2016 ----=0A= =0A= if (nr > 0 && nc > 0)=0A= {=0A= ! if ((nr =3D=3D 1 && dim =3D=3D 0) || dim =3D=3D 1)=0A= {=0A= retval.resize (nr, 1);=0A= for (int i =3D 0; i < nr; i++)=0A= *************** Matrix::sumsq (int dim) const=0A= *** 2049,2055 ****=0A= =0A= if (nr > 0 && nc > 0)=0A= {=0A= ! if ((nr =3D=3D 1 && dim =3D=3D 0) || dim =3D=3D 2)=0A= {=0A= retval.resize (nr, 1);=0A= for (int i =3D 0; i < nr; i++)=0A= --- 2049,2055 ----=0A= =0A= if (nr > 0 && nc > 0)=0A= {=0A= ! if ((nr =3D=3D 1 && dim =3D=3D 0) || dim =3D=3D 1)=0A= {=0A= retval.resize (nr, 1);=0A= for (int i =3D 0; i < nr; i++)=0A= ------=_NextPart_000_0015_01C07F8B.28BC88C0-- _________________________________________________________ Do You Yahoo!? Get your free at yahoo dot com address at http://mail.yahoo.com ------------------------------------------------------------- Octave is freely available under the terms of the GNU GPL. Octave's home on the web: http://www.octave.org How to fund new projects: http://www.octave.org/funding.html Subscription information: http://www.octave.org/archive.html -------------------------------------------------------------