⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 algorithmutilities.cs

📁 K-Means C++实现 带演示程序 K-Means C++实现 带演示程序
💻 CS
字号:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;
using System.Data;

namespace SimpleKMeans
{
    class AlgorithmUtilities
    {
        /// <summary>
        /// K-Means聚类算法
        /// </summary>
        /// <param name="rawdata">KMeans原始数据</param>
        /// <param name="rows">数据点个数</param>
        /// <param name="K">聚类个数</param>
        /// <param name="means">初始聚类中心</param>
        /// <param name="minOffset">聚类中心的最小偏移量,用于控制聚类处理的精度。</param>
        /// <param name="times">最大迭代次数,-1为不控制</param>
        /// <param name="result">聚类划分结果</param>
        /// <param name="size">返回的每个聚类的大小</param>
        /// <param name="finalMeans">返回的最终聚类中心</param>
        /// <param name="size">表示第一个参数的长度</param>
        /// <param name="finalMeans_size">表示第九个参数的长度</param>
        [DllImport(@"SimpleKMeans.Core.dll",
            EntryPoint = "DataMining_KMeans",
            CharSet = CharSet.Auto)]
        public static extern void DataMining_KMeans(
            [MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 9)]
            double[] rawdata,
            int rows,
            int K,
            [MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 2)]
            int[] means,
            double minOffset,
            int times,
            [MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 1)]
            int[] result,
            [MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 2)]
            int[] sizes,
            [MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 10)]
            double[] finalMeans,
            int size,
            int finalMeans_size);



        public static double[] LoadData(DataTable dt, string xField, string yField)
        {
            double[] data = new double[dt.Rows.Count * 2];
            for (int i = 0; i < dt.Rows.Count; i++)
            {
                data[i] = double.Parse(dt.Rows[i][xField].ToString());
                data[i + dt.Rows.Count] = double.Parse(dt.Rows[i][yField].ToString());
            }

            return data;
        }

        public static int[] GetRandomMeans(int K, int rows)
        {
            int[] means = new int[K];
            Random rand = new Random(1);
            for (int i = 0; i < K; i++)
            {
                means[i] = rand.Next(i + 1, rows - 1 - i);
            }

            return means;
        }
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -