# HG changeset patch # User jwe # Date 1099363345 0 # Node ID 38dd53c8935e2a4765d481961c438540967a4cf7 # Parent 11bea7392e69bcbc1beff9891cee07f62b1376e9 [project @ 2004-11-02 02:42:25 by jwe] diff -r 11bea7392e69 -r 38dd53c8935e src/ChangeLog --- a/src/ChangeLog Mon Nov 01 21:06:44 2004 +0000 +++ b/src/ChangeLog Tue Nov 02 02:42:25 2004 +0000 @@ -1,3 +1,10 @@ +2004-11-01 David Bateman + + * DLD-FUNCTIONS/filter.cc (filter (MArray&, MArray&, + MArrayN&, MArrayN&, int)): The variable si is now at least 2-D. + (Ffilter): Force si to be 2-D, while allowing arbitrary vector + orientation. + 2004-11-01 John W. Eaton * data.cc (INSTANTIATE_EYE): New macro. Use it to instantiate diff -r 11bea7392e69 -r 38dd53c8935e src/DLD-FUNCTIONS/filter.cc --- a/src/DLD-FUNCTIONS/filter.cc Mon Nov 01 21:06:44 2004 +0000 +++ b/src/DLD-FUNCTIONS/filter.cc Tue Nov 02 02:42:25 2004 +0000 @@ -77,10 +77,10 @@ return y; } - int x_len = x_dims (dim); + int x_len = x_dims(dim); dim_vector si_dims = si.dims (); - int si_len = si_dims (0); + int si_len = si_dims(0); if (si_len != ab_len - 1) { @@ -88,19 +88,7 @@ return y; } - if (si_dims.length () == 1) - { - // Special case as x_dims.length () might be 2, but be a vector. - if (x_dims.length () > 2 - || (x_dims.length () == 2 - && (x_dims(0) != 1 || x_dims(1) != si_dims(0)) - && (x_dims(1) != 1 || x_dims(0) != si_dims(0)))) - { - error ("filter: dimensionality of si and x must agree"); - return y; - } - } - else if (si_dims.length () != x_dims.length ()) + if (si_dims.length () != x_dims.length ()) { error ("filter: dimensionality of si and x must agree"); return y; @@ -115,7 +103,7 @@ if (x_dims(i) == 1) continue; - if (si_dims (++si_dim) != x_dims (i)) + if (si_dims(++si_dim) != x_dims(i)) { error ("filter: dimensionality of si and x must agree"); return y; @@ -223,12 +211,12 @@ MArrayN filter (MArray& b, MArray& a, MArrayN& x, int dim = -1) { - dim_vector x_dims = x.dims (); + dim_vector x_dims = x.dims(); if (dim < 0) { // Find first non-singleton dimension - while (dim < x_dims.length () && x_dims (dim) <= 1) + while (dim < x_dims.length () && x_dims(dim) <= 1) dim++; // All dimensions singleton, pick first dimension @@ -248,8 +236,8 @@ int si_len = (a_len > b_len ? a_len : b_len) - 1; dim_vector si_dims = x.dims (); for (int i = dim; i > 0; i--) - si_dims (i) = si_dims (i-1); - si_dims (0) = si_len; + si_dims(i) = si_dims(i-1); + si_dims(0) = si_len; MArrayN si (si_dims, T (0.0)); @@ -381,7 +369,7 @@ { // Find first non-singleton dimension dim = 0; - while (dim < x_dims.length () && x_dims (dim) <= 1) + while (dim < x_dims.length () && x_dims(dim) <= 1) dim++; // All dimensions singleton, pick first dimension @@ -412,8 +400,8 @@ dim_vector si_dims = x.dims (); for (int i = dim; i > 0; i--) - si_dims (i) = si_dims (i-1); - si_dims (0) = si_len; + si_dims(i) = si_dims(i-1); + si_dims(0) = si_len; si.resize (si_dims, 0.0); } @@ -421,18 +409,17 @@ { dim_vector si_dims = args (3).dims (); bool si_is_vector = true; - for (int i=0; i < si_dims.length (); i++) - if (si_dims (i) != 1 && si_dims (i) < si_dims.numel ()) + for (int i = 0; i < si_dims.length (); i++) + if (si_dims(i) != 1 && si_dims(i) < si_dims.numel ()) { si_is_vector = false; break; } + si = args(3).complex_array_value (); + if (si_is_vector) - // XXX FIXME XXX -- there must be a better way... - si = ComplexNDArray (MArrayN (ArrayN (args(3).complex_vector_value ()))); - else - si = args(3).complex_array_value (); + si = si.reshape (dim_vector (si.numel (), 1)); } if (! error_state) @@ -470,8 +457,8 @@ dim_vector si_dims = x.dims (); for (int i = dim; i > 0; i--) - si_dims (i) = si_dims (i-1); - si_dims (0) = si_len; + si_dims(i) = si_dims(i-1); + si_dims(0) = si_len; si.resize (si_dims, 0.0); } @@ -479,18 +466,17 @@ { dim_vector si_dims = args (3).dims (); bool si_is_vector = true; - for (int i=0; i < si_dims.length (); i++) - if (si_dims (i) != 1 && si_dims (i) < si_dims.numel ()) + for (int i = 0; i < si_dims.length (); i++) + if (si_dims(i) != 1 && si_dims(i) < si_dims.numel ()) { si_is_vector = false; break; } + si = args(3).array_value (); + if (si_is_vector) - // XXX FIXME XXX -- there must be a better way... - si = NDArray (MArrayN (ArrayN (args(3).vector_value ()))); - else - si = args(3).array_value (); + si = si.reshape (dim_vector (si.numel (), 1)); } if (! error_state)