2014-11-25 34 views
1

我目前正在將一個MATLAB程序翻譯成Python。我使用numpy成功移植了所有以前的矢量操作。然而,我被困在下面的代碼中,這是一個餘弦相似性度量。Inf對Matlab的使用

% W and ind are different sized matrices 
dist = full(W * (W(ind2(range),:)' - W(ind1(range),:)' + W(ind3(range),:)')); 
for i=1:length(range) 
    dist(ind1(range(i)),i) = -Inf; 
    dist(ind2(range(i)),i) = -Inf; 
    dist(ind3(range(i)),i) = -Inf; 
end 
disp(dist) 
[~, mx(range)] = max(dist); 

我不明白以下部分。

dist(indx(range(i)),i) = -Inf; 

什麼實際上,當你在右側使用

= -Inf; 

是怎麼回事?

回答

2

它只是爲左側分配一個minus infinity值。

分配該值可能顯得很奇怪,特別是因爲距離cannot be negative。但它看起來像用於從最後一行中的max計算中有效地移除這些條目。

如果Python沒有「無限」(我不知道的Python)如果dist是一個真正的距離(因此非負),你可以使用,而不是-inf任何負值來達到同樣的效果,即從max計算中刪除這些條目。

+0

是,DIST的'的結果(INDX(範圍(I))中,i)'是INF中。 – Castilla 2014-11-26 17:05:59

2

-Inf通常用於初始化一個變量,以便稍後可以將它用於循環中的比較。 例如,如果我想找到函數中的最大值(並忘記了最大命令)。然後我會作出這樣的:

function maxF = findMax(f,a,b) 
maxF = -Inf; 
x = a:0.001:b; 
for i = 1:length(x) 
    if f(x) > maxF 
     maxF = f(x); 
    end 
end 

它是在MATLAB的方法,以確保任何其他值比當前。所以Python中的比較將是-sys.maxint +1。

參見例如: Maximum and Minimum values for ints

+0

謝謝你的回答。 – Castilla 2014-11-27 22:34:30

3

在Matlab中(參見:Inf):

Inf文件返回正無窮大的IEEE®算術表示。

因此Inf產生的值大於所有其他數值。 -Inf產生的值保證小於任何其他數值。當你想迭代地找到一個最大值並且需要一個第一個值來比較的時候,它通常會被使用,因爲它總是會比你的第一個比較少。

根據維基百科(參見:IEEE 754 Inf):

正和負無窮大因而表示:

爲負無窮大符號= 0正無窮大,1。
偏置指數=全1位。
fraction =全0位。

Python有使用'-inf'相同的概念(見注6 here):

浮子還接受字符串「南」和「INF」與可選的前綴「+」或「 - 」號不是數字(NaN)和正數或負數的無窮大。

>>> a=float('-inf') 
>>> a 
-inf 
>>> b=-27983.444 
>>> min(a,b) 
-inf 
+0

謝謝你的回答。 – Castilla 2014-11-27 22:34:10