说明:三角函数的余弦值Cos我想,每个学计算机的理工人都知道,但是真的明白它的用途,我也是刚明白。每个人在初中或者高中的时候,都有这么个疑惑,学三角函数干什么用的?很直白的答案就是考试用的。而且当时的老师只管教,只管怎么解题,至于将学习的知识运用到生活中,没有这门课堂。最终的结果却是,我们只知道学,不知道用。说来也惭愧啊,我也是看了吴军博士的《数学之美》,才领悟到的。这本书真的给我很多的启发。

Cos的用途:

  1. 考试用。
  2. 通过计算2个向量,可以知道他们的相似度。余弦值越小,则2个向量越垂直,余弦值越接近1,则这个向量就越平行(相似)。这样,我们就可以将向量抽象为事物的特征集合了。计算向量的余弦值,就可以判断事物的相似度。至于详细的运用领域,还是读读这本书吧。

代码中的Cosine.cs是我很早从网上搜到的,地址也忘了。

计算代码如下:

Cosine.cs类

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text; namespace ConsoleApplication1
{
class Cosine
{
/// <summary>
/// 计算向量余弦值
/// </summary>
/// <param name="vector1"></param>
/// <param name="vector2"></param>
public static double Calculate(Dictionary<int, double> vector1, Dictionary<int, double> vector2)
{
double dotProduct = CalcDotProduct(vector1, vector2);
double length1 = CalcLength(vector1);
double length2 = CalcLength(vector2);
double cosine = dotProduct / (length1 * length2);
return cosine;
}
/// <summary>
/// 计算向量长度(vector length)
/// </summary>
/// <param name="vector"></param>
/// <returns></returns>
private static double CalcLength(Dictionary<int, double> vector)
{
double length = ;
foreach (KeyValuePair<int, double> kvp in vector)
{
length += Math.Pow(kvp.Value, );
}
return Math.Sqrt(length);
} /// <summary>
/// 计算向量点积(dot product)/内积(inner product)
/// </summary>
/// <param name="vector1"></param>
/// <param name="vector2"></param>
/// <returns></returns>
private static double CalcDotProduct(Dictionary<int, double> vector1, Dictionary<int, double> vector2)
{
double dotProduct = ;
foreach (KeyValuePair<int, double> kvp in vector1)
{
if (vector2.ContainsKey(kvp.Key))
{
dotProduct += kvp.Value * vector2[kvp.Key];
}
}
return dotProduct;
}
}
}

Program类,是我的,嘿嘿。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text; namespace ConsoleApplication1
{
class Program
{
//自定义输入函数
static void FunInput(Dictionary<int, double> Vector, int num)
{
for (int i = ; i < num; i++)
{
Vector.Add(i, double.Parse(Console.ReadLine()));
}
} //自定义输出函数
static void FunOutput(Dictionary<int, double> Vector)
{
//使用KeyValuePair输出
foreach (KeyValuePair<int, double> number in Vector)
{
Console.WriteLine("{0}---{1}", number.Key, number.Value);
}
} static void Main(string[] args)
{
Dictionary<int, double> Vector1 = new Dictionary<int,double>();
Dictionary<int, double> Vector2 = new Dictionary<int,double>(); Console.WriteLine("这2个向量的维度数必须相同,请输入维度数值:");
int num = int.Parse(Console.ReadLine());//字符串转化为整形 Console.WriteLine("请输入Vector1向量的{0}个数值(每行一个):",num);
FunInput(Vector1, num);
//FunOutput(Vector1); Console.WriteLine("请输入Vector2向量的{0}个数值(每行一个):", num);
FunInput(Vector2, num);
//FunOutput(Vector2);
Console.WriteLine("Vector1和Vector2的余弦值是:{0}",Cosine.Calculate(Vector1,Vector2));
}
}
}

C#——Dictionary<TKey, TValue> 计算向量的余弦值的更多相关文章

  1. C#编程(五十三)----------字典Dictionary<TKey,TValue>

    字典 关键字:Dicitionary 说明: 必须包含命名空间System.Collection.Generic Dictionary里面的每一个元素都是一个键值对(由两个元组组成:键和值). 键必须 ...

  2. .net源码分析 – Dictionary<TKey, TValue>

    接上篇:.net源码分析 – List<T> Dictionary<TKey, TValue>源码地址:https://github.com/dotnet/corefx/blo ...

  3. .NET中Dictionary<TKey, TValue>浅析

    .NET中Dictionary<TKey, Tvalue>是非常常用的key-value的数据结构,也就是其实就是传说中的哈希表..NET中还有一个叫做Hashtable的类型,两个类型都 ...

  4. Dictionary<TKey, TValue> 类

    C# Dictionary<TKey, TValue> 类 Dictionary<TKey, TValue> 泛型类提供了从一组键到一组值的映射.字典中的每个添加项都由一个值及 ...

  5. C# 字典 Dictionary<Tkey,Tvalue>

    最近悟出来一个道理,在这儿分享给大家:学历代表你的过去,能力代表你的现在,学习代表你的将来.我们都知道计算机技术发展日新月异,速度惊人的快,你我稍不留神,就会被慢慢淘汰!因此:每日不间断的学习是避免被 ...

  6. 巧用Dictionary<TKey,TValue>,完成客户需求

    前几天与客户沟通一个项目,客户对其中某个模块提了一个需求. 把从数据库中取出的对物品的统计重新拆分重新统计.鉴于用文字不能清除的表达需求,我将该需求画出来,便于理解. 需求如下图: 就是A,B,C D ...

  7. C# .Net 中字典Dictionary<TKey,TValue>泛型类 学习浅谈

    一.综述: Dictionary<TKey,TValue>是在 .NET Framework 2.0 版中是新增的.表示键值对的集合,Dictionary<TKey,TValue&g ...

  8. 自定义一个可以被序列化的泛型Dictionary<TKey,TValue>集合

    Dictionary是一个键值类型的集合.它有点像数组,但Dictionary的键可以是任何类型,内部使用Hash Table存储键和值.本篇自定义一个类型安全的泛型Dictionary<TKe ...

  9. 使用结构struct作为Dictionary<TKey,TValue>的键

    我们经常用简单数据类型,比如int作为泛型Dictionary<TKey,TValue>的key,但有时候我们希望自定义数据类型作为Dictionary<TKey,TValue> ...

随机推荐

  1. jstl格式化数字

    jstl中的<fmt:formatNumber>标签   设置显示时间戳<%    request.setAttribute("currentTimeStamp" ...

  2. 【python】密码生成器

    #!/usr/bin/env python#-*- coding:UTF-8 -*- import random   #导入random模块import string  #导入string模块 sal ...

  3. 把 TBytes 转换为十六进制字符串

    function BytestoHexString(ABytes: TBytes; len: Integer): AnsiString; begin   SetLength(Result, len*) ...

  4. JQuery Mobile 页面参数传递(转)

    在单页模版中使用基于HTTP的方式通过POST和GET请求传递参数,而在多页模版中不需要与服务器进行通信,通常在多页模版中有以下三种方法来实现页面间的参数传递. 1.GET方式:在前一个页面生成参数并 ...

  5. A 浪哥的烦恼 完全背包dp

    https://biancheng.love/contest-ng/index.html#/131/problems 首先,去到n点的最小时间是所有数加起来. 然后,如果我1 --- 2,然后再2-- ...

  6. 各种 starter poms (启动器)

    starter包含了搭建项目,快速运行所需的依赖.它是一个依赖关系描述符的集合.当应用需要一种spring的服务时,不需要粘贴拷贝大量的依赖关系描述符.例如想在spring中使用redis,只需要在项 ...

  7. hdu 2669 Romantic (乘法逆元)

    Romantic Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Su ...

  8. Java中的转义字符

    1.转义字符 1.八进制转义序列:\ + 1到3位5数字:范围'\000'~'\377' \0:空字符     2.Unicode转义字符:\u + 四个十六进制数字:0~65535       \u ...

  9. hdu 4268 Alice and Bob

    Alice and Bob Time Limit : 10000/5000ms (Java/Other)   Memory Limit : 32768/32768K (Java/Other) Tota ...

  10. 在指定控件位置弹出popup window

    先看效果图 黄色的就是弹出的popup window 首先自定义一个view用来显示,文件名为layout_my_view.xml <?xml version="1.0" e ...