📄 algorithmutilities.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 + -