1. 程式人生 > >各類距離和python實現

各類距離和python實現

  • 先看一下這個,我這裡主要是把實現這些距離的公式用python表達出來,其實網上其他人也都寫過,但我還是寫一遍
  • 閔可夫斯基距離
  • 歐式距離
  • 哈曼頓距離
  • 切比雪夫距離
  • 夾角餘弦
  • 漢明距離
  • 傑卡德相似係數
1、歐式距離:
如果是兩個向量AB運算的畫可以(A-B)(A-B)T的開根
import numpy as np
vec1=np.array([1,2,3])
vec2=np.array([4,5,6])
print np.sqrt( (vec1-vec2)*(vec1-vec2).T )
#或者
print ( (vec1-vec2)*(vec1-vec2).T )**0.5

2、哈曼頓距離:      

import numpy as np
vec1=np.array([1,2,3])
vec2=np.array([4,5,6])
print sum( np.abs(vec1-vec2) )

3、切比雪夫距離      
import numpy as np
vec1=np.array([1,2,3])
vec2=np.array([4,5,6])
print np.abs( (vec1-vec2).max() )

4、夾角餘弦

 
import numpy as np
vec1=np.array([1,2])
vec2=np.array([3,4])
cosv12=np.dot(vec1,vec2)  /  ( np.linalg.norm (vec1) * (np.linalg.norm(vec2) ) )
print cosv12

5、漢明距離 應用:資訊編碼
import numpy as np
vec1=np.mat([1,1,1,1])
vec2=np.mat([1,0,0,1])
smstr=np.nonzero(vec1-vec2)
print np.shape(smstr)[1]

6、傑卡德相似係數 應用:衡量兩個集合相似度的一種指標

import numpy as np
import scipy.spatial.distance as dist
matv=np.mat([[1,1,0,1],[0,1,1,0]])
print "dist.jaccard",dist.pdist(matv,'jaccard')

相關推薦

各類距離python實現

先看一下這個,我這裡主要是把實現這些距離的公式用python表達出來,其實網上其他人也都寫過,但我還是寫一遍閔可夫斯基距離歐式距離哈曼頓距離切比雪夫距離夾角餘弦漢明距離傑卡德相似係數1、歐式距離:

Logistic回歸模型Python實現

logistic rip ast 步長 glm 常見 gist nes sel 回歸分析是研究變量之間定量關系的一種統計學方法,具有廣泛的應用。 Logistic回歸模型 線性回歸 先從線性回歸模型開始,線性回歸是最基本的回歸模型,它使用線性函數描述兩個變量之間的關系,將連

分別使用shellpython實現兩列排序

lines 相同 要求 open 並且 lam split shel join 有一個文件1.txt如下,要求使用shell和python實現排序,先按照第一列排序,第一列相同再按照第二列排序,並且輸出到另外一個文件2.txt LZdeMacBook-Pro:~ lz$ c

javapython實現一個加權SlopeOne推薦算法

劉德華 .com java實現 偏差 推薦算法 blog src double ash 一.加權SlopeOne算法公式: (1).求得所有item之間的評分偏差 上式中分子部分為項目j與項目i的偏差和,分母部分為所有同時對項目j與項目i評分的用戶數 (2).加權預測評分

旋轉數組的最小數字(C++ Python 實現

ram 兩個 requires images red 輸入 off internet iat (說明:本博客中的題目、題目詳細說明及參考代碼均摘自 “何海濤《劍指Offer:名企面試官精講典型編程題》2012年”) 題目   把一個數組最開始的若幹個元素搬到數組的末尾,我們

數值的整數次方(C++ Python 實現

n-n style elif function program ava right 直接 including (說明:本博客中的題目、題目詳細說明及參考代碼均摘自 “何海濤《劍指Offer:名企面試官精講典型編程題》2012年”) 題目   實現函數 double Powe

數據結構-排序算法原理Python實現

遞歸 pivot 依次 新的 樹形 希爾排序 image pso 代碼 排序算法概覽 插入排序 基本思想是每次講一個待排序的記錄,按其關鍵字大小插入到前面已拍好的子序列中,直到全部完成。 直接插入排序 講元素L(i)插入到有序序列L[1,…,i-1]中,執行以下操作: 1

最常見加密方式Python實現

壓縮 能力 原版 密碼學 輸出 政府 n) 加密算法 簡介 前言 我們所說的加密方式,都是對二進制編碼的格式進行加密的,對應到Python中,則是我們的Bytes。 所以當我們在Python中進行加密操作的時候,要確保我們操作的是Bytes,否則就會報錯。 將字符串和Byt

對數損失函數(Logarithmic Loss Function)的原理 Python 實現

NPU 技術分享 blog 入參 rom __main__ bsp nat () 原理   對數損失, 即對數似然損失(Log-likelihood Loss), 也稱邏輯斯諦回歸損失(Logistic Loss)或交叉熵損失(cross-entropy Loss), 是在

leetcode15leetcode16 講解python實現

leetcode15 題目 給定一個包含 n 個整數的陣列 nums,判斷 nums 中是否存在三個元素 a,b,c ,使得 a + b + c = 0 ?找出所有滿足條件且不重複的三元組。 注意:答案中不可以包含重複的三元組。 例如, 給定陣列 nums = [-1, 0, 1,

leetcode 141 判斷連結串列是否有環(C++python實現

【解題思路】 方法一:使用set來判重,每到一個新節點,判斷set中有沒有這個節點。時間複雜度為O(n*1),1代表每次查set。 方法二:龜兔賽跑。快和慢兩個指標,如果有環,則一定會相遇。具體見下面的程式碼:  【C++】 cla

Leetcode206 反轉連結串列(C++python實現

面試經常會考的題,先來看C++: class Solution { public: ListNode* reverseList(ListNode* head) { ListNode* cur = head; ListNode* NewH =

leetcode 20 簡單括號匹配(C++python實現)

【題目描述】 給定一個只包括 '(',')','{','}','[',']' 的字串,判斷字串是否有效。 有效字串需滿足: 左括號必須用相同型別的右括號閉合。 左括號必須以正確的順序閉合。 注意空字串可被認為是有效字串。

1049 數列的片段 Python實現

給定一個正數數列,我們可以從中擷取任意的連續的幾個數,稱為片段。例如,給定數列 { 0.1, 0.2, 0.3, 0.4 },我們有 (0.1) (0.1, 0.2) (0.1, 0.2, 0.3) (0.1, 0.2, 0.3, 0.4) (0.2) (0.2, 0.3) (0.2, 0.

支援向量機(SVM)python實現(三)

6. python實現 根據前面的一步步推導獲得的結果,我們就可以使用python來實現SVM了 這裡我們使用iris資料集進行驗證,由於該資料集有4維,不容易在二維平面上表示,我們先使用LDA對其進行降維,又因為該資料集有3類樣本,我們編寫的SVM是二分類的,所以我們將

k近鄰演算法(k-nearest neighbor)python 實現

1、k近鄰演算法 k近鄰學習是一種常見的監督學習方法,其工作機制非常簡單:給定測試樣本,基於某種距離度量找出訓練集中與其最靠近的k個訓練樣本,然後基於這K個"鄰居"的資訊來進行預測。 通常,在分類任務中可使用"投票法",即選擇這K個樣本中出現最多的類別標記作為預測結果;在迴歸任務中可使用"平

原型聚類(一)k均值演算法python實現

原型聚類 原型聚類演算法假設聚類結構能通過一組原型刻畫,在現實聚類任務中極為常用。通常情形下,演算法先對原型進行初始化,然後對原型進行迭代更新求解。這裡的“原型”我認為實際上就是“原來的模型”,這類演算法企圖模擬出生成資料集的模型。 k均值演算法(k-means

原型聚類(二)學習向量量化(LVQ)python實現

學習向量量化(Learning Vector Quantization,LVQ)和k-means類似,也屬於原型聚類的一種演算法,不同的是,LVQ處理的是有標籤的樣本集,學習過程利用樣本的標籤進行輔助聚類,個人感覺這個演算法更像是一個分類演算法。。。 若存在一個

常見素書篩選方法原理Python實現

1. 普通篩選(常用於求解單個素數問題) 自然數中,除了1和它本身以外不再有其他因數。 import math def func_get_prime(n): func = lambda x: not [x%i for i in range(2, int(ma

常見加密方式Python實現

前言 我們所說的加密方式,都是對二進位制編碼的格式進行加密的,對應到Python中,則是我們的Bytes。 所以當我們在Python中進行加密操作的時候,要確保我們操作的是Bytes,否則就會報錯。 將字串和Bytes互相轉換可以使用encode()和decod