ecological-engine/src/main/java/org/gcube/contentmanagement/lexicalmatcher/utils/MathFunctions.java

110 lines
2.8 KiB
Java

package org.gcube.contentmanagement.lexicalmatcher.utils;
import java.math.BigInteger;
import java.util.ArrayList;
import org.gcube.contentmanagement.graphtools.abstracts.GenericStandaloneGraph;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class MathFunctions {
private static Logger logger = LoggerFactory.getLogger(MathFunctions.class);
//increments a percentage o mean calculation when a lot of elements are present
public static float incrementPerc(float perc, float quantity, int N){
if (N==0)
return quantity;
float out = 0;
int N_plus_1 = N+1;
out = (float)((perc + ((double)quantity / (double)N )) * ((double)N/(double)N_plus_1));
return out;
}
//increments a percentage o mean calculation when a lot of elements are present
public static double incrementAvg(double perc, double quantity, int N){
if (N==0)
return quantity;
double out = 0;
int N_plus_1 = N+1;
out = (double)((perc + ((double)quantity / (double)N )) * ((double)N/(double)N_plus_1));
return out;
}
public static ArrayList<Integer> generateRandoms(int numberOfRandoms, int min, int max) {
ArrayList<Integer> randomsSet = new ArrayList<Integer>();
// if number of randoms is equal to -1 generate all numbers
if (numberOfRandoms == -1) {
for (int i = min; i < max; i++) {
randomsSet.add(i);
}
} else {
int numofrandstogenerate = 0;
if (numberOfRandoms <= max) {
numofrandstogenerate = numberOfRandoms;
} else {
numofrandstogenerate = max;
}
if (numofrandstogenerate == 0) {
randomsSet.add(0);
} else {
for (int i = 0; i < numofrandstogenerate; i++) {
int RNum = -1;
RNum = (int) ((max) * Math.random()) + min;
// generate random number
while (randomsSet.contains(RNum)) {
RNum = (int) ((max) * Math.random()) + min;
// AnalysisLogger.getLogger().debug("generated " + RNum);
}
// AnalysisLogger.getLogger().debug("generated " + RNum);
if (RNum >= 0)
randomsSet.add(RNum);
}
}
}
logger.trace("MathFunctions-> generateRandoms " + randomsSet.toString());
return randomsSet;
}
public static int[] generateSequence(int elements) {
int [] sequence = new int[elements];
for (int i=0;i<elements;i++){
sequence[i]=i;
}
return sequence;
}
public static BigInteger chunk2Index(int chunkIndex,int chunkSize){
return BigInteger.valueOf(chunkIndex).multiply(BigInteger.valueOf(chunkSize));
}
//calculates mean
public static double mean(double[] p) {
double sum = 0; // sum of all the elements
for (int i=0; i<p.length; i++) {
sum += p[i];
}
return sum / p.length;
}//end method mean
}