/// <summary> /// Create a new simple matrix for testing. /// </summary> /// <param name="name"></param> /// <param name="m11"></param> /// <param name="m12"></param> /// <param name="m21"></param> /// <param name="m22"></param> /// <returns></returns> private IDataSource <SparseTwinIndex <float> > CreateData(string name, float m11, float m12, float m21, float m22) { SparseIndexing indexes = new SparseIndexing() { Indexes = new[] { new SparseSet() { Start = 1, Stop = 2, SubIndex = new SparseIndexing() { Indexes = new[] { new SparseSet() { Start = 1, Stop = 2 } } } } } }; float[][] data = new[] { new[] { m11, m12 }, new[] { m21, m22 } }; return(new MatrixSource(new SparseTwinIndex <float>(indexes, data)) { Name = name }); }
private SparseIndexing RootCreateIndices() { SparseIndexing rootLevel = new SparseIndexing(); rootLevel.Indexes = TriIndexSet.Select(range => new SparseSet() { Start = range.Start, Stop = range.Stop }).ToArray(); return(rootLevel); }
private int GetIndexForFlat(SparseIndexing rootLevel, int flatIndex) { var indexes = rootLevel.Indexes; int pos = 0; for (int i = 0; i < indexes.Length; i++) { var delta = indexes[i].Stop - indexes[i].Start + 1; if (flatIndex <= pos + delta) { return(i); } pos += delta; } return(-1); }
public void LoadData() { float[][][] data = new float[TwinSources.Length][][]; SparseIndexing indicies = RootCreateIndices(); for (int i = 0; i < TwinSources.Length; i++) { TwinSources[i].LoadData(); var innerData = TwinSources[i].GiveData(); CreateIndices(indicies, i, innerData); data[i] = innerData.GetFlatData(); TwinSources[i].UnloadData(); } Data = new SparseTriIndex <float>(indicies, data); Loaded = true; }
/// <summary> /// Createa a new simple vector for testing. /// </summary> /// <param name="name"></param> /// <param name="m1"></param> /// <param name="m2"></param> /// <returns></returns> private IDataSource <SparseArray <float> > CreateData(string name, float m1, float m2) { SparseIndexing indexes = new SparseIndexing() { Indexes = new[] { new SparseSet() { Start = 1, Stop = 2, } } }; float[] data = new[] { m1, m2 }; return(new VectorSource(new SparseArray <float>(indexes, data)) { Name = name }); }
public void LoadData() { float[][][] data = new float[TwinSources.Length][][]; SparseIndexing indicies = RootCreateIndices(); for (int i = 0; i < TwinSources.Length; i++) { TwinSources[i].LoadData(); var innerData = TwinSources[i].GiveData(); CreateIndices(indicies, i, innerData); var inner = innerData.GetFlatData(); if (CreateCopy) { inner = inner.Select(i2 => i2.Clone() as float[]).ToArray(); } data[i] = inner; TwinSources[i].UnloadData(); } Data = new SparseTriIndex <float>(indicies, data); Loaded = true; }
private void CreateIndices(SparseIndexing rootLevel, int i, SparseTwinIndex <float> innerData) { rootLevel.Indexes[GetIndexForFlat(rootLevel, i)].SubIndex = innerData.Indexes; }