public KKMeans(KCentroid <TScalar, TKernel> kcentroid) { if (kcentroid == null) { throw new ArgumentNullException(nameof(kcentroid)); } kcentroid.ThrowIfDisposed(); this._KCentroid = kcentroid; var error = NativeMethods.kkmeans_new(this._KCentroid.Parameter.KernelType.ToNativeKernelType(), this._KCentroid.Parameter.SampleType.ToNativeMatrixElementType(), this._KCentroid.Parameter.TemplateRows, this._KCentroid.Parameter.TemplateColumns, kcentroid.NativePtr, out var ret); switch (error) { case NativeMethods.ErrorType.MatrixElementTypeNotSupport: throw new ArgumentException($"{this._KCentroid.Parameter.SampleType} is not supported."); case NativeMethods.ErrorType.MatrixElementTemplateSizeNotSupport: throw new ArgumentException($"{nameof(this._KCentroid.Parameter.TemplateColumns)} or {nameof(this._KCentroid.Parameter.TemplateRows)} is not supported."); case NativeMethods.ErrorType.SvmKernelNotSupport: throw new ArgumentException($"{this._KCentroid.Parameter.KernelType} is not supported."); } this.NativePtr = ret; }
public void SetKCentroid(KCentroid <TScalar, TKernel> kcentroid) { if (kcentroid == null) { throw new ArgumentNullException(nameof(kcentroid)); } kcentroid.ThrowIfDisposed(); var ret = NativeMethods.kkmeans_set_kcentroid(this._KCentroid.Parameter.KernelType.ToNativeKernelType(), this._KCentroid.Parameter.SampleType.ToNativeMatrixElementType(), this._KCentroid.Parameter.TemplateRows, this._KCentroid.Parameter.TemplateColumns, this.NativePtr, kcentroid.NativePtr); }
public static Matrix <TScalar> RankFeatures <TScalar, TKernel>(KCentroid <TScalar, TKernel> kcentroid, IEnumerable <Matrix <TScalar> > samples, IEnumerable <TScalar> labels) where TScalar : struct where TKernel : KernelBase { if (kcentroid == null) { throw new ArgumentNullException(nameof(kcentroid)); } if (samples == null) { throw new ArgumentNullException(nameof(samples)); } if (labels == null) { throw new ArgumentNullException(nameof(labels)); } var sampleArray = samples.ToArray(); var labelsArray = labels.ToArray(); var first = sampleArray.FirstOrDefault(); if (first == null) { throw new ArgumentException($"{nameof(samples)} contains null object", nameof(samples)); } var templateRow = first.TemplateRows; var templateColumn = first.TemplateColumns; foreach (var sample in sampleArray) { if (sample == null) { throw new ArgumentException($"{nameof(samples)} contains null object", nameof(samples)); } if (sample.TemplateRows != templateRow) { throw new ArgumentException($"{nameof(samples)} contains different {nameof(sample.TemplateRows)} of {typeof(Matrix<TScalar>).Name}", nameof(samples)); } if (sample.TemplateColumns != templateColumn) { throw new ArgumentException($"{nameof(samples)} contains different {nameof(sample.TemplateColumns)} of {typeof(Matrix<TScalar>).Name}", nameof(samples)); } } var param = new MatrixTemplateSizeParameter(templateRow, templateColumn); using (var inSamples = new StdVector <Matrix <TScalar> >(sampleArray, param)) using (var inLabels = new StdVector <TScalar>(labelsArray)) { var type = first.MatrixElementType.ToNativeMatrixElementType(); var error = NativeMethods.rank_features(kcentroid.Parameter.KernelType.ToNativeKernelType(), type, templateRow, templateColumn, kcentroid.NativePtr, inSamples.NativePtr, inLabels.NativePtr, out var ret); switch (error) { case NativeMethods.ErrorType.MatrixElementTypeNotSupport: throw new ArgumentException($"{type} is not supported."); case NativeMethods.ErrorType.MatrixElementTemplateSizeNotSupport: throw new ArgumentException($"{nameof(first.TemplateColumns)} or {nameof(first.TemplateRows)} is not supported."); case NativeMethods.ErrorType.SvmKernelNotSupport: throw new ArgumentException($"{kcentroid.Parameter.KernelType} is not supported."); } return(new Matrix <TScalar>(ret, 0, 2)); } }