public FFTRepulsion(double[] Y, double[] GradR, int N, int D, PIConfiguration PIConfig) { Control.UseNativeMKL(); //required by FFTRepulsion this.Y = Y; grad = GradR; this.N = N; this.D = D; n_terms = D + 2; n_interpolation_points = PIConfig.n_interpolation_points; h = 1.0 / n_interpolation_points; min_num_intervals = PIConfig.min_num_intervals; intervals_per_integer = PIConfig.intervals_per_integer; bins = new int[N * D]; in_box = new double[N * D]; interpolated_values = new double[N * D * n_interpolation_points]; interpolation_denominators = new double[n_interpolation_points]; CalculateDenominators(); potentialsQij = new double[N * n_terms]; }
private static void UpdateConfig(tSNE tsne, string conf, Dictionary <string, object> param) { Console.WriteLine("\n{0}Configuration:", conf); switch (conf) { case "Initialization": InitializationConfiguration ic = tsne.InitializationConfig; ic.SmartInit = Convert.ToBoolean(UpdateField(param, "SmartInit", ic.SmartInit)); ic.InitialSolutionSeed = Convert.ToInt32(UpdateField(param, "InitialSolutionSeed", ic.InitialSolutionSeed)); if (ic.InitialSolutionSeed == -1) { Console.WriteLine("\tInitialSolutionSeed set to -1 - using random seed."); } break; case "Affinities": AffinitiesConfiguration ac = tsne.AffinitiesConfig; ac.Perplexity = Convert.ToDouble(UpdateField(param, "Perplexity", ac.Perplexity)); ac.EntropyTol = Convert.ToDouble(UpdateField(param, "EntropyTol", ac.EntropyTol)); ac.EntropyIter = Convert.ToInt32(UpdateField(param, "EntropyIter", ac.EntropyIter)); break; case "LSHF": LSHFConfiguration lc = tsne.LSHFConfig; lc.LSHForestTrees = Convert.ToInt32(UpdateField(param, "LSHForestTrees", lc.LSHForestTrees)); lc.LSHTreeC = Convert.ToInt32(UpdateField(param, "LSHTreeC", lc.LSHTreeC)); lc.LSHHashDims = Convert.ToInt32(UpdateField(param, "LSHHashDims", lc.LSHHashDims)); lc.LSHSeed = Convert.ToInt32(UpdateField(param, "LSHSeed", lc.LSHSeed)); if (lc.LSHSeed == -1) { Console.WriteLine("\tLSHSeed set to -1 - using random seed."); } break; case "Gradient": GradientConfiguration gc = tsne.GradientConfig; gc.Iterations = Convert.ToInt32(UpdateField(param, "Iterations", gc.Iterations)); gc.GradMinGain = Convert.ToDouble(UpdateField(param, "GradMinGain", gc.GradMinGain)); gc.RepulsionMethod = UpdateRepulsionMethod(param, gc.RepulsionMethod); gc.Exaggeration = UpdateFunctionField(param, "Exaggeration", gc.Exaggeration); gc.Momentum = UpdateFunctionField(param, "Momentum", gc.Momentum); gc.LearningRate = UpdateFunctionField(param, "LearningRate", gc.LearningRate); break; case "BarnesHut": BarnesHutConfiguration bc = tsne.BarnesHutConfig; bc.BarnesHutCondition = Convert.ToDouble(UpdateField(param, "BarnesHutCondition", bc.BarnesHutCondition)); bc.Presort = Convert.ToBoolean(UpdateField(param, "Presort", bc.Presort)); break; case "PI": PIConfiguration pc = tsne.PIConfig; pc.min_num_intervals = Convert.ToInt32(UpdateField(param, "min_num_intervals", pc.min_num_intervals)); pc.intervals_per_integer = Convert.ToDouble(UpdateField(param, "intervals_per_integer", pc.intervals_per_integer)); pc.n_interpolation_points = Convert.ToInt32(UpdateField(param, "n_interpolation_points", pc.n_interpolation_points)); break; default: Console.WriteLine("\tConfiguration type {0} unknown.", conf); break; } if (param.Count > 0) { Console.WriteLine("\tUnknown {0}Configuration parameters: {1}!", conf, string.Join(", ", param.Keys)); } }
public void TestMethod() { /* -- testing versions */ PIDebug.Title("Version"); Console.WriteLine(PIConfiguration.Version_isStable()); /* -- testing getPartialSums() */ PIDebug.Title("Partial sums", true); PIVariable variable = new PIVariable(); variable.AddValues(new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }); PIVariable[] varArray = variable.GetPartsForPartialSum(3, CutStyleForPartialSum.START); if (varArray != null) { Console.WriteLine(varArray.Length); PIDebug.Blank(); if (varArray.Length >= 1) { Console.WriteLine(varArray[0].AsString(0)); } if (varArray.Length >= 2) { Console.WriteLine(varArray[1].AsString(0)); } if (varArray.Length >= 3) { Console.WriteLine(varArray[2].AsString(0)); } } PIDebug.Blank(); varArray = variable.GetPartsForPartialSum(3, CutStyleForPartialSum.END); if (varArray != null) { if (varArray.Length >= 1) { Console.WriteLine(varArray[0].AsString(0)); } if (varArray.Length >= 2) { Console.WriteLine(varArray[1].AsString(0)); } if (varArray.Length >= 3) { Console.WriteLine(varArray[2].AsString(0)); } } /* -- testing order */ PIDebug.Title("Order in variable", true); PIVariable varA = new PIVariable(); varA.AddValue(175); varA.AddValue(166); varA.AddValue(170); varA.AddValue(169); varA.AddValue(188); varA.AddValue(175); varA.AddValue(176); varA.AddValue(171); varA.AddValue(173); varA.AddValue(175); varA.AddValue(173); varA.AddValue(174); varA.AddValue(169); PIVariable uniqueOrderedA = varA.GetUniqueOrdered(); Console.WriteLine("1) varA - unique list with frequency and order"); PIDebug.Blank(); for (int i = 0; i < uniqueOrderedA.Count(); i++) { Console.WriteLine(String.Format("value = {0:f2} , frequency = {1:d}, order = {2:f2}", uniqueOrderedA.GetValue(i), uniqueOrderedA.Get(i).GetFrequency(), uniqueOrderedA.Get(i).GetOrder())); } PIDebug.Blank(); Console.WriteLine("1a) varA - frequency and order"); PIDebug.Blank(); for (int i = 0; i < varA.Count(); i++) { Console.WriteLine(String.Format("value = {0:f2} , frequency = {1:d}, order = {2:f2}", varA.GetValue(i), varA.Get(i).GetFrequency(), varA.Get(i).GetOrder())); } PIVariable varB = new PIVariable(); varB.AddValue(69); varB.AddValue(55); varB.AddValue(67); varB.AddValue(52); varB.AddValue(90); varB.AddValue(53); varB.AddValue(57); varB.AddValue(57); varB.AddValue(68); varB.AddValue(73); varB.AddValue(62); varB.AddValue(90); varB.AddValue(63); varB.GetUniqueOrdered(); PIDebug.Blank(); Console.WriteLine("2a) varB - frequency and order"); PIDebug.Blank(); for (int i = 0; i < varB.Count(); i++) { Console.WriteLine(String.Format("value = {0:f2} , frequency = {1:d}, order = {2:f2}", varB.GetValue(i), varB.Get(i).GetFrequency(), varB.Get(i).GetOrder())); } PIDebug.Blank(); Console.WriteLine("-> order`s difference"); PIDebug.Blank(); PITwoVariables varAB = new PITwoVariables(varA, varB); Console.WriteLine("Sum of order`s differences = " + varAB.GetSumOrderDiff2()); }
public FFTRepulsion3D(double[] Y, double[] GradR, int N, PIConfiguration PIConfig) : base(Y, GradR, N, 3, PIConfig) { }