From d35e6ae54275fd4f9e7768b16f19fe80593bbb21 Mon Sep 17 00:00:00 2001 From: Dariusz Zbyrad Date: Fri, 25 Sep 2020 11:22:37 +0200 Subject: [PATCH 1/2] Use system.arraycopy() method instead of manually copy --- examples/src/org/ejml/example/PolynomialFit.java | 4 ++-- main/ejml-core/src/org/ejml/data/DMatrixSparseTriplet.java | 4 ++-- .../hessenberg/TridiagonalDecompositionHouseholder_DDRM.java | 4 ++-- .../org/ejml/dense/row/misc/DeterminantFromMinor_DDRM.java | 4 ++-- .../decomposition/svd/SvdImplicitQrDecompose_Ultimate.java | 4 ++-- .../decomposition/svd/SvdImplicitQrDecompose_UltimateS.java | 4 ++-- 6 files changed, 12 insertions(+), 12 deletions(-) diff --git a/examples/src/org/ejml/example/PolynomialFit.java b/examples/src/org/ejml/example/PolynomialFit.java index 76b444da5..d5cfaabb9 100644 --- a/examples/src/org/ejml/example/PolynomialFit.java +++ b/examples/src/org/ejml/example/PolynomialFit.java @@ -157,8 +157,8 @@ private void removeObservation( int index ) { final double d[] = y.data; // shift - for( int i = index; i < N; i++ ) { - d[i] = d[i+1]; + if (N - index >= 0) { + System.arraycopy(d, index + 1, d, index, N - index); } y.numRows--; } diff --git a/main/ejml-core/src/org/ejml/data/DMatrixSparseTriplet.java b/main/ejml-core/src/org/ejml/data/DMatrixSparseTriplet.java index f28c1dc7e..a3a4fb490 100644 --- a/main/ejml-core/src/org/ejml/data/DMatrixSparseTriplet.java +++ b/main/ejml-core/src/org/ejml/data/DMatrixSparseTriplet.java @@ -304,8 +304,8 @@ public void remove(int row, int col) { if( where >= 0 ) { nz_length -= 1; - for (int i = where; i < nz_length; i++) { - nz_value.data[i] = nz_value.data[i+1]; + if (nz_length - where >= 0) { + System.arraycopy(nz_value.data, where + 1, nz_value.data, where, nz_length - where); } int end = nz_length*2; for (int i = where*2; i < end; i += 2) { diff --git a/main/ejml-ddense/src/org/ejml/dense/row/decomposition/hessenberg/TridiagonalDecompositionHouseholder_DDRM.java b/main/ejml-ddense/src/org/ejml/dense/row/decomposition/hessenberg/TridiagonalDecompositionHouseholder_DDRM.java index 0ce462932..b79b9f0c6 100644 --- a/main/ejml-ddense/src/org/ejml/dense/row/decomposition/hessenberg/TridiagonalDecompositionHouseholder_DDRM.java +++ b/main/ejml-ddense/src/org/ejml/dense/row/decomposition/hessenberg/TridiagonalDecompositionHouseholder_DDRM.java @@ -133,8 +133,8 @@ public DMatrixRMaj getQ(@Nullable DMatrixRMaj Q , boolean transposed ) { if( transposed ) { for( int j = N-2; j >= 0; j-- ) { w[j+1] = 1; - for( int i = j+2; i < N; i++ ) { - w[i] = QT.data[j*N+i]; + if (N - j + 2 >= 0) { + System.arraycopy(QT.data, j * N + j + 2, w, j + 2, N - j + 2); } QrHelperFunctions_DDRM.rank1UpdateMultL(Q, w, gammas[j + 1], j + 1, j + 1, N); } diff --git a/main/ejml-ddense/src/org/ejml/dense/row/misc/DeterminantFromMinor_DDRM.java b/main/ejml-ddense/src/org/ejml/dense/row/misc/DeterminantFromMinor_DDRM.java index 0c2ef2d13..198872577 100644 --- a/main/ejml-ddense/src/org/ejml/dense/row/misc/DeterminantFromMinor_DDRM.java +++ b/main/ejml-ddense/src/org/ejml/dense/row/misc/DeterminantFromMinor_DDRM.java @@ -197,8 +197,8 @@ private int openRemove( int where ) { private void openAdd( int where, int val ) { - for( int i = numOpen; i > where; i-- ) { - open[i] = open[i-1]; + if (numOpen - where >= 0) { + System.arraycopy(open, where, open, where + 1, numOpen - where); } numOpen++; open[where] = val; diff --git a/main/ejml-experimental/src/org/ejml/dense/row/decomposition/svd/SvdImplicitQrDecompose_Ultimate.java b/main/ejml-experimental/src/org/ejml/dense/row/decomposition/svd/SvdImplicitQrDecompose_Ultimate.java index 1d7826282..af98de7f3 100644 --- a/main/ejml-experimental/src/org/ejml/dense/row/decomposition/svd/SvdImplicitQrDecompose_Ultimate.java +++ b/main/ejml-experimental/src/org/ejml/dense/row/decomposition/svd/SvdImplicitQrDecompose_Ultimate.java @@ -135,8 +135,8 @@ public DMatrixRMaj getW(@Nullable DMatrixRMaj W ) { W.zero(); } - for( int i = 0; i < numSingular; i++ ) { - W.data[i*W.numCols+i] = singularValues[i]; + if (numSingular >= 0) { + System.arraycopy(singularValues, 0, W.data, 0 * W.numCols + 0, numSingular); } return W; diff --git a/main/ejml-experimental/src/org/ejml/dense/row/decomposition/svd/SvdImplicitQrDecompose_UltimateS.java b/main/ejml-experimental/src/org/ejml/dense/row/decomposition/svd/SvdImplicitQrDecompose_UltimateS.java index 238ed770d..58ad7f499 100644 --- a/main/ejml-experimental/src/org/ejml/dense/row/decomposition/svd/SvdImplicitQrDecompose_UltimateS.java +++ b/main/ejml-experimental/src/org/ejml/dense/row/decomposition/svd/SvdImplicitQrDecompose_UltimateS.java @@ -135,8 +135,8 @@ public DMatrixRMaj getW(@Nullable DMatrixRMaj W ) { W.zero(); } - for( int i = 0; i < numSingular; i++ ) { - W.data[i*W.numCols+i] = singularValues[i]; + if (numSingular >= 0) { + System.arraycopy(singularValues, 0, W.data, 0 * W.numCols + 0, numSingular); } return W; From cb231472ad053b7d69e0c3b62186c28b7e8897e3 Mon Sep 17 00:00:00 2001 From: Dariusz Zbyrad Date: Fri, 25 Sep 2020 11:25:17 +0200 Subject: [PATCH 2/2] Use StringBuilder instead of string concatenation in loop --- .../generate/org/ejml/data/GenerateMatrixFixedNxN.java | 4 ++-- .../org/ejml/dense/fixed/GenerateFixedFeatures.java | 6 +++--- main/ejml-simple/src/org/ejml/equation/TokenList.java | 6 +++--- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/main/ejml-core/generate/org/ejml/data/GenerateMatrixFixedNxN.java b/main/ejml-core/generate/org/ejml/data/GenerateMatrixFixedNxN.java index 1a92da425..f3657aa6d 100644 --- a/main/ejml-core/generate/org/ejml/data/GenerateMatrixFixedNxN.java +++ b/main/ejml-core/generate/org/ejml/data/GenerateMatrixFixedNxN.java @@ -150,9 +150,9 @@ private void printClassParam( int dimen ) { } private void printFunctionParam( int spaces, int dimen ) { - String s = ""; + StringBuilder s = new StringBuilder(); for (int i = 0; i < spaces; i++) { - s += " "; + s.append(" "); } for( int y = 1; y <= dimen; y++ ) { if( y == 1 ) diff --git a/main/ejml-ddense/generate/org/ejml/dense/fixed/GenerateFixedFeatures.java b/main/ejml-ddense/generate/org/ejml/dense/fixed/GenerateFixedFeatures.java index ff50777a3..79f11d442 100644 --- a/main/ejml-ddense/generate/org/ejml/dense/fixed/GenerateFixedFeatures.java +++ b/main/ejml-ddense/generate/org/ejml/dense/fixed/GenerateFixedFeatures.java @@ -91,13 +91,13 @@ private void hasUncountable(int dimen ){ out.print(" public static boolean hasUncountable("+nameMatrix+" a ) {\n"); for( int y = 1; y <= dimen; y++ ) { - String row = ""; + StringBuilder row = new StringBuilder(); for( int x = 1; x <= dimen; x++ ) { String n = y+""+x; if( x > 1 ) - row += "+ "; - row += "a.a"+n; + row.append("+ "); + row.append("a.a").append(n); } out.print(" if( UtilEjml.isUncountable("+row+"))\n"+ " return true;\n"); diff --git a/main/ejml-simple/src/org/ejml/equation/TokenList.java b/main/ejml-simple/src/org/ejml/equation/TokenList.java index 09ccbfe33..941291e36 100644 --- a/main/ejml-simple/src/org/ejml/equation/TokenList.java +++ b/main/ejml-simple/src/org/ejml/equation/TokenList.java @@ -236,13 +236,13 @@ public void insertAfter(Token before, TokenList list ) { */ @Override public String toString() { - String ret = ""; + StringBuilder ret = new StringBuilder(); Token t = first; while( t != null ) { - ret += t +" "; + ret.append(t).append(" "); t = t.next; } - return ret; + return ret.toString(); } /**