Java tutorial
/* * 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; } }