Array Util
/* * Javlov - a Java toolkit for reinforcement learning with multi-agent support. * * Copyright (c) 2009 Matthijs Snel * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. *///package net.javlov.util; publicclass ArrayUtil { publicstatic String arrayToString( double[] d) { String s = ""; for ( int i = 0; i < d.length; i++ ) s += d[i] + " "; return s; } publicstatic String arrayToString( double[][] A, int opt) { String s = ""; int m = A.length; if ( opt == 1 ) for ( int i = 0; i < m; i++ ) { try { for ( int j = 0; j < A[i].length; j++ ) if (j == (A[i].length-1)) s += A[i][j] + "\n"; else s += A[i][j] + " "; } catch (NullPointerException e) { System.err.println("NULLPOINTER EXCEPT AT i=" + i); } } elseif ( opt == 2 ) for ( int j = 0; j < A[0].length; j++ ) for ( int i = 0; i < m; i++ ) if (i == (m-1)) s += A[i][j] + "\n"; else s += A[i][j] + " "; return s; } publicstatic String arrayToString( int[] d) { String s = ""; for ( int i = 0; i < d.length; i++ ) s += d[i] + " "; return s; } publicstatic String arrayToString( int[][] A, int opt) { String s = ""; int m = A.length; int n = A[0].length; if ( opt == 1 ) for ( int i = 0; i < m; i++ ) for ( int j = 0; j < n; j++ ) if (j == (n-1)) s += A[i][j] + "\n"; else s += A[i][j] + " "; elseif ( opt == 2 ) for ( int j = 0; j < n; j++ ) for ( int i = 0; i < m; i++ ) if (i == (m-1)) s += A[i][j] + "\n"; else s += A[i][j] + " "; return s; } publicstatic String arrayToString( Object[] o) { String s = ""; for ( int i = 0; i < o.length; i++ ) s += o[i] + " "; return s; } publicstaticint binaryToInt( int bin[] ) { int r = 0, pos = 0; for ( int i = bin.length - 1; i >= 0; i--) r += bin[i]*Math.pow(2,pos++); return r; } publicdouble[] concat( double a[], double b[] ) { double r[] = newdouble[a.length + b.length]; System.arraycopy(a, 0, r, 0, a.length); System.arraycopy(b, 0, r, a.length, b.length); return r; } publicstaticdouble[] diff( double[] a, double[] b) { double r[] = newdouble[a.length]; for ( int i = 0; i < a.length; i++ ) r[i] = a[i] - b[i]; return r; } publicstaticdouble[] div ( int[] a, double d ) { double r[] = newdouble[a.length]; for ( int i = 0; i < a.length; i++ ) r[i] = a[i] / d; return r; } publicstaticdouble[] div ( double[] a, int d ) { double r[] = newdouble[a.length]; for ( int i = 0; i < a.length; i++ ) r[i] = a[i] / d; return r; } publicstaticdouble max( double[] d ) { double max = Double.NEGATIVE_INFINITY; for ( int i = 0; i < d.length; i++ ) if ( d[i] > max ) max = d[i]; return max; } publicstaticint max( int[] d ) { int max = Integer.MIN_VALUE; for ( int i = 0; i < d.length; i++ ) if ( d[i] > max ) max = d[i]; return max; } publicstaticint maxIndex( double[] d ) { int maxpos = 0; for ( int i = 0; i < d.length; i++ ) if ( d[i] >= d[maxpos] ) maxpos = i; return maxpos; } publicstaticint maxIndex( int[] d ) { int maxpos = 0; for ( int i = 0; i < d.length; i++ ) if ( d[i] >= d[maxpos] ) maxpos = i; return maxpos; } publicstaticint[] multimaxIndex( double[] d ) { int maxpos[] = newint[d.length], lastpos = 0; double maxval = Double.NEGATIVE_INFINITY; for ( int i = 0; i < d.length; i++ ) if ( d[i] > maxval ) { maxval = d[i]; maxpos = newint[d.length - i]; lastpos = 0; maxpos[lastpos++] = i; } elseif ( d[i] == maxval ) { maxpos[lastpos++] = i; } int r[] = newint[lastpos]; System.arraycopy(maxpos, 0, r, 0, lastpos); return r; } publicstaticint[] multimaxIndex( int[] d ) { int maxpos[] = newint[d.length], lastpos = 0, maxval = Integer.MIN_VALUE; for ( int i = 0; i < d.length; i++ ) if ( d[i] > maxval ) { maxval = d[i]; maxpos = newint[d.length - i]; lastpos = 0; maxpos[lastpos++] = i; } elseif ( d[i] == maxval ) { maxpos[lastpos++] = i; } int r[] = newint[lastpos]; System.arraycopy(maxpos, 0, r, 0, lastpos); return r; } publicstaticdouble[] subArray( double a[], int start, int len ) { double r[] = newdouble[len]; System.arraycopy(a, start, r, 0, len); return r; } publicstaticint[] subArray( int a[], int start, int len ) { int r[] = newint[len]; System.arraycopy(a, start, r, 0, len); return r; } publicstaticint[] sum( int[][] a, int l ) { int r[] = newint[l]; for ( int j = 0; j < l; j++ ) for ( int i = 0; i < a.length; i++ ) r[j] += a[i][j]; return r; } publicstaticdouble[] sum( double[][] a, int l ) { double r[] = newdouble[l]; for ( int j = 0; j < l; j++ ) for ( int i = 0; i < a.length; i++ ) r[j] += a[i][j]; return r; } publicstaticdouble sum( double [] d ) { double r = 0; for ( int i = 0; i < d.length; i++ ) r += d[i]; return r; } publicstaticint sum( int [] d ) { int r = 0; for ( int i = 0; i < d.length; i++ ) r += d[i]; return r; } publicstaticvoid sumeachInPlace( double [] d ) { for ( int i = 1; i < d.length; i++ ) d[i] = d[i-1] + d[i]; } publicstaticvoid sumeachInPlace( int [] d ) { for ( int i = 1; i < d.length; i++ ) d[i] = d[i-1] + d[i]; } publicstaticdouble[] sumeach( double [] d ) { double r[] = newdouble[d.length]; r[0] = d[0]; for ( int i = 1; i < d.length; i++ ) r[i] = d[i-1] + d[i]; return r; } publicstaticint[] sumeach( int [] d ) { int r[] = newint[d.length]; r[0] = d[0]; for ( int i = 1; i < d.length; i++ ) r[i] = d[i-1] + d[i]; return r; } publicstaticdouble sumexp( double [] d ) { double r = 0; for ( int i = 0; i < d.length; i++ ) r += Math.exp(d[i]); return r; } publicstaticdouble sumexp( int [] d ) { double r = 0; for ( int i = 0; i < d.length; i++ ) r += Math.exp(d[i]); return r; } }
Related examples in the same category