Package edu.umd.hooka

Source Code of edu.umd.hooka.Array2D

package edu.umd.hooka;

import java.util.Arrays;

import edu.umd.hooka.alignment.ZeroProbabilityException;

public final class Array2D {
  float[] data;
  int width;
  int size;
  public Array2D(int maxCap) {
    data = new float[maxCap];
  }
  public void resize(int x, int y) {
    int s = x * y;
    if (s > data.length)
      throw new RuntimeException("Requested size larger than allocated space: x="+x +" y="+y);
    size = s;
    width = x;
    this.fill(0.0f);
  }
  public void fill(float val) {
    Arrays.fill(data, 0, size, val);
  }
  public float get(int x, int y) {
    return data[y * width + x];
  }
  public void set(int x, int y, float v) {
    data[y * width + x] = v;
  }
  public int getSize1() {
    return width;
  }
  public int getSize2() {
    return size / width;
  }
  public float normalizeColumn(int c) {
    float sum = 0.0f;
    int cur = c;
    int r = getSize2();
    for (int i = 0; i < r; i++) {
      sum += data[cur];
      cur += width;
    }
    if (sum == 0.0f) {
      StringBuffer sb = new StringBuffer();
      sb.append("normalizeColumn(").append(c).append("):");
      cur = c;
      for (int i = 0; i < r; i++) {
        sb.append(' ').append(data[cur]);
        cur += width;
      }
      sb.append(" sum=0.0");
      throw new ZeroProbabilityException(sb.toString());
    }
    cur = c;
    for (int i = 0; i < r; i++) {
      data[cur] /= sum;
      cur += width;
    }
    return sum;
  }
  public String toString() {
    StringBuffer sb = new StringBuffer();
    int r = getSize2();
    int c = getSize1();
    for (int j = 0; j < r; j++) {
      for (int i = 0; i < c; i++) {
        sb.append("  ").append(get(i,j));
      }
      sb.append('\n');
    }
    return sb.toString();
  }
}
TOP

Related Classes of edu.umd.hooka.Array2D

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.