protected double[][] calculateClustersPartitionsMatrix() throws RuntimeException {
		if( this.clustersPartitionsMatrixSet)
			return this.getClustersPartitionsMatrix();
				
		// Table initialization
		double[][] newMatrix = new double[this.clusterNumber()][this.classesNumber()];
		for(int i = 0; i < newMatrix.length; ++i)
			for(int j = 0; j < newMatrix[0].length; ++j)
				newMatrix[i][j] = 0;
		
		// Sum all the performances matrixes
		Iterator<PType> iter = this.performances.iterator();
		while( iter.hasNext()) {
			PType perf = iter.next();
			
			double[][] matrix = perf.getClustersPartitionsMatrix();
			for(int i = 0; i < newMatrix.length; ++i) {
				String valI = this.indexToValue(i);
				for(int j = 0; j < newMatrix[0].length; ++j)
					newMatrix[i][j] += matrix[perf.valueToIndex(valI)][perf.valueToIndex(this.indexToValue(j))];
			}
		}
		// Make the average
		for(int i = 0; i < newMatrix.length; ++i)
			for(int j = 0; j < newMatrix[0].length; ++j)
				newMatrix[i][j] /= (double)this.performances.size();
		
		super.setClustersPartitionsMatrix(newMatrix);
		this.clustersPartitionsMatrixSet = true;	
		
		return this.getClustersPartitionsMatrix();	
	}