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;
public class ArrayUtil {
public static String arrayToString( double[] d) {
String s = "";
for ( int i = 0; i < d.length; i++ )
s += d[i] + " ";
return s;
}
public static 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);
}
}
else if ( 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;
}
public static String arrayToString( int[] d) {
String s = "";
for ( int i = 0; i < d.length; i++ )
s += d[i] + " ";
return s;
}
public static 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] + " ";
else if ( 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;
}
public static String arrayToString( Object[] o) {
String s = "";
for ( int i = 0; i < o.length; i++ )
s += o[i] + " ";
return s;
}
public static int 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;
}
public double[] concat( double a[], double b[] ) {
double r[] = new double[a.length + b.length];
System.arraycopy(a, 0, r, 0, a.length);
System.arraycopy(b, 0, r, a.length, b.length);
return r;
}
public static double[] diff( double[] a, double[] b) {
double r[] = new double[a.length];
for ( int i = 0; i < a.length; i++ )
r[i] = a[i] - b[i];
return r;
}
public static double[] div ( int[] a, double d ) {
double r[] = new double[a.length];
for ( int i = 0; i < a.length; i++ )
r[i] = a[i] / d;
return r;
}
public static double[] div ( double[] a, int d ) {
double r[] = new double[a.length];
for ( int i = 0; i < a.length; i++ )
r[i] = a[i] / d;
return r;
}
public static double 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;
}
public static int 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;
}
public static int maxIndex( double[] d ) {
int maxpos = 0;
for ( int i = 0; i < d.length; i++ )
if ( d[i] >= d[maxpos] )
maxpos = i;
return maxpos;
}
public static int maxIndex( int[] d ) {
int maxpos = 0;
for ( int i = 0; i < d.length; i++ )
if ( d[i] >= d[maxpos] )
maxpos = i;
return maxpos;
}
public static int[] multimaxIndex( double[] d ) {
int maxpos[] = new int[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 = new int[d.length - i];
lastpos = 0;
maxpos[lastpos++] = i;
} else if ( d[i] == maxval ) {
maxpos[lastpos++] = i;
}
int r[] = new int[lastpos];
System.arraycopy(maxpos, 0, r, 0, lastpos);
return r;
}
public static int[] multimaxIndex( int[] d ) {
int maxpos[] = new int[d.length],
lastpos = 0,
maxval = Integer.MIN_VALUE;
for ( int i = 0; i < d.length; i++ )
if ( d[i] > maxval ) {
maxval = d[i];
maxpos = new int[d.length - i];
lastpos = 0;
maxpos[lastpos++] = i;
} else if ( d[i] == maxval ) {
maxpos[lastpos++] = i;
}
int r[] = new int[lastpos];
System.arraycopy(maxpos, 0, r, 0, lastpos);
return r;
}
public static double[] subArray( double a[], int start, int len ) {
double r[] = new double[len];
System.arraycopy(a, start, r, 0, len);
return r;
}
public static int[] subArray( int a[], int start, int len ) {
int r[] = new int[len];
System.arraycopy(a, start, r, 0, len);
return r;
}
public static int[] sum( int[][] a, int l ) {
int r[] = new int[l];
for ( int j = 0; j < l; j++ )
for ( int i = 0; i < a.length; i++ )
r[j] += a[i][j];
return r;
}
public static double[] sum( double[][] a, int l ) {
double r[] = new double[l];
for ( int j = 0; j < l; j++ )
for ( int i = 0; i < a.length; i++ )
r[j] += a[i][j];
return r;
}
public static double sum( double [] d ) {
double r = 0;
for ( int i = 0; i < d.length; i++ )
r += d[i];
return r;
}
public static int sum( int [] d ) {
int r = 0;
for ( int i = 0; i < d.length; i++ )
r += d[i];
return r;
}
public static void sumeachInPlace( double [] d ) {
for ( int i = 1; i < d.length; i++ )
d[i] = d[i-1] + d[i];
}
public static void sumeachInPlace( int [] d ) {
for ( int i = 1; i < d.length; i++ )
d[i] = d[i-1] + d[i];
}
public static double[] sumeach( double [] d ) {
double r[] = new double[d.length];
r[0] = d[0];
for ( int i = 1; i < d.length; i++ )
r[i] = d[i-1] + d[i];
return r;
}
public static int[] sumeach( int [] d ) {
int r[] = new int[d.length];
r[0] = d[0];
for ( int i = 1; i < d.length; i++ )
r[i] = d[i-1] + d[i];
return r;
}
public static double sumexp( double [] d ) {
double r = 0;
for ( int i = 0; i < d.length; i++ )
r += Math.exp(d[i]);
return r;
}
public static double 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