public ClusterResults(ClusterDataSet <TRow, TColumn> dataSet, DendrogramData rowDendrogram, ImmutableList <DendrogramData> columnDendrograms) { DataSet = dataSet; RowDendrogram = rowDendrogram; ColumnGroupDendrograms = columnDendrograms; }
private Tuple <ImmutableList <DataFrame>, DendrogramData> ClusterDataFrameGroup(ImmutableList <DataFrame> group) { if (group.Count == 0 || group[0].ColumnHeaders.Count <= 1) { return(Tuple.Create(group, (DendrogramData)null)); } var points = new double[group[0].ColumnHeaders.Count, RowCount *group.Count]; for (int iRow = 0; iRow < RowCount; iRow++) { for (int iFrame = 0; iFrame < group.Count; iFrame++) { var frame = group[iFrame]; int y = iRow * group.Count + iFrame; for (int x = 0; x < frame.DataColumns.Count; x++) { points[x, y] = frame.DataColumns[x][iRow]; } } } alglib.clusterizercreate(out alglib.clusterizerstate s); alglib.clusterizersetpoints(s, points, DistanceMetric.AlgLibValue); alglib.clusterizerrunahc(s, out alglib.ahcreport rep); var newGroup = ImmutableList.ValueOf(group.Select(frame => frame.ReorderColumns(rep.p))); var dendrogramData = new DendrogramData(rep.pz, rep.mergedist); return(Tuple.Create(newGroup, dendrogramData)); }