Mercurial > octave
changeset 31928:a8473e7db0f4
Re-use linspace code for scalars for computing linspace of vectors.
Delete hand-rolled code for linspace of vectors which was not sophisticated and
missed corner cases, and instead re-use existing code for scalars.
* CMatrix.cc, dMatrix.cc, fCMatrix.cc, fMatrix.cc (linspace):
Use a for loop to call linspace for scalars with each element from
the vector input. Aggregate the resulting row vectors into a return matrix.
author | Rik <rik@octave.org> |
---|---|
date | Fri, 24 Mar 2023 15:43:28 -0700 |
parents | fef004fa8575 |
children | 40b77efa1c7b |
files | liboctave/array/CMatrix.cc liboctave/array/dMatrix.cc liboctave/array/fCMatrix.cc liboctave/array/fMatrix.cc |
diffstat | 4 files changed, 4 insertions(+), 52 deletions(-) [+] |
line wrap: on
line diff
--- a/liboctave/array/CMatrix.cc Fri Mar 24 14:42:24 2023 -0700 +++ b/liboctave/array/CMatrix.cc Fri Mar 24 15:43:28 2023 -0700 @@ -3645,19 +3645,7 @@ retval.clear (m, n); for (octave_idx_type i = 0; i < m; i++) - retval.xelem (i, 0) = x1(i); - - // The last column is unused so temporarily store delta there - Complex *delta = &retval.xelem (0, n-1); - for (octave_idx_type i = 0; i < m; i++) - delta[i] = (x1(i) == x2(i)) ? 0 : (x2(i) - x1(i)) / (n - 1.0); - - for (octave_idx_type j = 1; j < n-1; j++) - for (octave_idx_type i = 0; i < m; i++) - retval.xelem (i, j) = x1(i) + static_cast<double> (j)*delta[i]; - - for (octave_idx_type i = 0; i < m; i++) - retval.xelem (i, n-1) = x2(i); + retval.insert (linspace (x1(i), x2(i), n), i, 0); return retval; }
--- a/liboctave/array/dMatrix.cc Fri Mar 24 14:42:24 2023 -0700 +++ b/liboctave/array/dMatrix.cc Fri Mar 24 15:43:28 2023 -0700 @@ -3029,19 +3029,7 @@ retval.clear (m, n); for (octave_idx_type i = 0; i < m; i++) - retval.xelem (i, 0) = x1(i); - - // The last column is unused so temporarily store delta there - double *delta = &retval.xelem (0, n-1); - for (octave_idx_type i = 0; i < m; i++) - delta[i] = (x1(i) == x2(i)) ? 0 : (x2(i) - x1(i)) / (n - 1); - - for (octave_idx_type j = 1; j < n-1; j++) - for (octave_idx_type i = 0; i < m; i++) - retval.xelem (i, j) = x1(i) + j*delta[i]; - - for (octave_idx_type i = 0; i < m; i++) - retval.xelem (i, n-1) = x2(i); + retval.insert (linspace (x1(i), x2(i), n), i, 0); return retval; }
--- a/liboctave/array/fCMatrix.cc Fri Mar 24 14:42:24 2023 -0700 +++ b/liboctave/array/fCMatrix.cc Fri Mar 24 15:43:28 2023 -0700 @@ -3676,19 +3676,7 @@ retval.clear (m, n); for (octave_idx_type i = 0; i < m; i++) - retval.xelem (i, 0) = x1(i); - - // The last column is unused so temporarily store delta there - FloatComplex *delta = &retval.xelem (0, n-1); - for (octave_idx_type i = 0; i < m; i++) - delta[i] = (x1(i) == x2(i)) ? 0 : (x2(i) - x1(i)) / (n - 1.0f); - - for (octave_idx_type j = 1; j < n-1; j++) - for (octave_idx_type i = 0; i < m; i++) - retval.xelem (i, j) = x1(i) + static_cast<float> (j)*delta[i]; - - for (octave_idx_type i = 0; i < m; i++) - retval.xelem (i, n-1) = x2(i); + retval.insert (linspace (x1(i), x2(i), n), i, 0); return retval; }
--- a/liboctave/array/fMatrix.cc Fri Mar 24 14:42:24 2023 -0700 +++ b/liboctave/array/fMatrix.cc Fri Mar 24 15:43:28 2023 -0700 @@ -3035,19 +3035,7 @@ retval.clear (m, n); for (octave_idx_type i = 0; i < m; i++) - retval.xelem (i, 0) = x1(i); - - // The last column is unused so temporarily store delta there - float *delta = &retval.xelem (0, n-1); - for (octave_idx_type i = 0; i < m; i++) - delta[i] = (x1(i) == x2(i)) ? 0 : (x2(i) - x1(i)) / (n - 1); - - for (octave_idx_type j = 1; j < n-1; j++) - for (octave_idx_type i = 0; i < m; i++) - retval.xelem (i, j) = x1(i) + j*delta[i]; - - for (octave_idx_type i = 0; i < m; i++) - retval.xelem (i, n-1) = x2(i); + retval.insert (linspace (x1(i), x2(i), n), i, 0); return retval; }