Matlab計算矩陣間距離

2022-01-24 04:56:16 字數 2553 閱讀 7168

夜深人靜時分,宿舍就我自己,只有蚊子陪伴著我,我慢慢碼下這段文字............

我們倆交流了很多.......從實驗室,到研究課題,到lol,筆者深深為他淵博的學識和不俗的談吐所打動,恩恩,遇到志同道合的人挺不容易的........最重要的是感謝他的開源精神,給我了很多我急需的資料和**。在此,也感謝提供的這個平台,讓我們在這茫茫人海中有了相知相識的機會,哈哈,這其實就是區域性敏感雜湊的思想——在茫茫人海中發現相似的你啊,愛你們.............

該篇部落格來自於某x分享的**,我產生了寫此篇博文的靈感。

實現矩陣間任意行之間的歐式距離。通俗地說如下:兩個點的距離知道吧,矩陣是類似的原理,求x1和x2矩陣的距離,假設得到的結果矩陣為c,那麼c的下標ij表示的是x1中的第i行和x2中的第j行的距離。

if nargin == 2

p1 = double(p1);

p2 = double(p2);

x1=repmat(sum(p1.^2,2),[1 size(p2,1)]);%sum(x,2):橫向相加,得到列向量;sum(x),預設為豎向相加。

x2=repmat(sum(p2.^2,2),[1 size(p1,1)]);

r=p1*p2';

d=real(sqrt(x1+x2'-2*r));

else

p1 = double(p1);

% each vector is one row

x1=repmat(sum(p1.^2,2),[1 size(p1,1)]);

r=p1*p1';

d=x1+x1'-2*r;

d = real(sqrt(d));

end

加入p1:100*256,p2:5900*256,那麼x1:100*5900,x25900*100,r:5900*100。

repmat表示複製和平鋪,sum(p1.^2,2)就是每個元素先平方,然後每行求和,就變成乙個列向量;求矩陣x1和x2的距離:類似於(a-b)^2 = a^2+b^2-2ab然後開根號;matlab裡面呼叫repmat(a,m,n)命令:三個引數的含義:a:要被複製的矩陣或者向量,m複製成多少行,n複製成多少列。就是把a複製成m行,n列。[1 size(p2,1)]:這個就是將sum(p1.^2,2)得到的列向量複製一行,size(p2,1)列。

不計算距離如何知道樣本是不是緊鄰呀,這個就是歐式距離度量緊鄰與否。緊鄰與否可以通過語意度量,也可以通過距離度量,歐式距就是其中一種。

寫到上面,我想起了王老師寫的k-means(鏈結),那時候第一次接觸repmat函式。

%repmat 即 replicate matrix ,複製和平鋪矩陣,是 matlab 裡面的乙個函式。

%b = repmat(a,m,n)將矩陣 a 複製 m×n 塊,即把 a 作為 b 的元素,b 由 m×n 個 a 平鋪而成。b 的維數是 [size(a,1)*m, size(a,2)*n] 。

%點乘方a.^b,矩陣a中每個元素按b中對應元素乘方或者b是常數

%sum(x,2)表示矩陣x的橫向相加,求每行的和,結果是列向量。 而預設的sum(x)就是豎向相加,求每列的和,結果是行向量。

dist = sum((repmat(x(i,:),k,1)-nc).^2,2);

直接飲用小夥伴們的問題。

比如說,a陣是20*10,b陣是30*10的,a陣的20個行向量和b陣中的30個行向量計算歐式距,得到20*30的歐式距離矩陣c這個應該怎麼寫?

我每次寫出來的c陣每行都是相同的 簡直鬱悶死了,請教大牛~

clear all

%你可以定義自己的a,b矩陣,下面的矩陣僅作為例子

a=zeros(20,10);

b=ones(30,10);

%dist距離矩陣

dist=zeros(20,30);

for i=1:20

for j=1:30

dist(i,j)=norm(a(i,:)-b(j,:));

endend

dist = sqrt(a.^2*ones(size(b'))+ones(size(a))*(b').^2-2*a*b')

這個和方法1,異曲同工。而且,據傳,此方法較快。

for i = 1:size(x,1)

distance(i,:) = diag((repmat(x(i,:),n,1)-x)*(repmat(x(i,:),n,1)-x)');

end

看了這麼久的lsh,苦於沒有合適的**,很痛苦,給國內的某些大牛寫信,從來沒收到過回信,給國外的大牛寫信基本當天就會回信..........這算是國內外學者的精神風貌不同吧........正式這個原因,我慢慢想著摒棄開源,恩恩,感謝某x,讓我有了繼續開源的精神動力,人生路上就是需要這類人的陪伴.....從長遠**,筆者認為開源更有意義,也更能體現自己的價值.......每次我說我不懂,別人說我謙虛,其實我是真的不懂.....知道個大概,對面其實是一種誤導.......不過有時候也挺佩服自己能堅持下來...........筆者的目標是——網際網路行業布道者,歡迎志同道合的人和我聯絡............晚安~~~

Matlab中特徵向量間距離矩陣的並行mex程式

在matlab中,有n個向量 m維 的矩陣mat n,m 要計算任兩個向量間的距離,即距離矩陣,可使用以下的並行演算法以加速 include include include include using namespace std 提前定義執行緒數 const int nthreads 4 全域性變數...

Mysql計算時間距離

1,首先,看看mysql幾個內建時間函式 select now current timestamp current time sysdate 結果如下 2,計算時間差的內建函式timestampdiff timestampdiff interval,datetime expr1,datetime e...

計算兩點間距離

匯入math包 import math 定義點的函式 class point def init self,x 0,y 0 self.x x self.y y def getx self return self.x def gety self return self.y 定義直線函式 class ge...