4. 資料序列之相似度計算程式
List<int> upper = [], center = [], lower = [];
double[] sim = new double[upper.Count];
while (true)
{
Console.Write(@"請選擇操作項目:
(1) 輸入模型資料:
(2) 計算平均相似度:
(3) 顯示各資料相似度:
請選擇:");
switch (Console.ReadLine())
{
case "1":
Console.Write("輸入模型資料,總筆數為:");
int n = int.Parse(Console.ReadLine());
Console.Write(" 序列(x軸): ");
for (int i = 0; i < n; i++)
{
Console.Write(i.ToString().PadLeft(2) + " ");
}
Console.Write("\n數值串列(上限): ");
upper = Console.ReadLine().Split(" ").Select(int.Parse).ToList();
Console.Write("數值串列(中心): ");
center = Console.ReadLine().Split(" ").Select(int.Parse).ToList();
Console.Write("數值串列(下限): ");
lower = Console.ReadLine().Split(" ").Select(int.Parse).ToList();
break;
case "2":
Console.Write("請輸入 資料串列 檔名:");
var f = Console.ReadLine();
Console.WriteLine("已開放 資料串列 檔名:" + f + "\n");
var data = File.ReadAllText(f).Split(" ").Select(int.Parse).ToList();
sim = new double[data.Count];
for (global::System.Int32 i = 0; i < data.Count; i++)
{
double d = data[i];
if (d >= upper[i] || d <= lower[i])
{
sim[i] = 0;
continue;
}
if (d == center[i])
{
sim[i] = 1;
continue;
}
if (d > center[i])
{
sim[i] = 1 - (d - center[i]) / (upper[i] - center[i]);
}
else
{
sim[i] = 1 - (center[i] - d) / (center[i] - lower[i]);
}
}
Console.WriteLine($"平均相似度為 {sim.Average():f6}");
break;
case "3":
Console.Write("各資料相似度: ");
foreach (var item in sim)
{
Console.Write($"{item:f6} ");
}
break;
}
Console.Write("\n繼續:請按1,結束:請按0:");
if (Console.ReadLine() == "0") break;
}Last updated