/*
* Copyright 2004-2010 Information & Software Engineering Group (188/1)
* Institute of Software Technology and Interactive Systems
* Vienna University of Technology, Austria
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.ifs.tuwien.ac.at/dm/somtoolbox/license.html
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package at.tuwien.ifs.somtoolbox.layers.initialisation;
import java.util.Random;
import at.tuwien.ifs.somtoolbox.data.InputData;
import at.tuwien.ifs.somtoolbox.layers.Layer;
import at.tuwien.ifs.somtoolbox.layers.Unit;
import at.tuwien.ifs.somtoolbox.util.VectorTools;
/**
* @author Stefan Bischof
* @author Leo Sklenitzka
* @version $Id: RandomSamplingInitializer.java 3893 2010-11-03 13:57:47Z mayer $
*/
public class RandomSamplingInitializer implements LayerInitializer {
private Layer layer;
private int xSize;
private int ySize;
private int zSize;
private double[][] dataarray;
private Random rand;
public RandomSamplingInitializer(Layer layer, int xSize, int ySize, int zSize, InputData data) {
this.layer = layer;
this.xSize = xSize;
this.ySize = ySize;
this.zSize = zSize;
this.dataarray = data.getData();
this.rand = new Random();
}
/**
* Initialize the SOM Layer using Random Input Sampling
*
* @return initialized SOM
*/
@Override
public Unit[][][] initialize() {
Unit[][][] units = new Unit[xSize][ySize][zSize];
for (int k = 0; k < zSize; k++) {
for (int j = 0; j < ySize; j++) {
for (int i = 0; i < xSize; i++) {
units[i][j][k] = new Unit(layer, i, j, k,
VectorTools.normaliseVectorToUnitLength(dataarray[rand.nextInt(dataarray.length)]));
}
}
}
return units;
}
}