在Matlab上使用Inf

时间:2014-11-25 14:28:01

标签: python matlab numpy

我目前正在将MATLAB程序翻译成Python。我使用numpy成功移植了所有以前的向量操作。但是我被困在下面的代码中,这是一个余弦相似性度量。

% 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;

在右侧?

3 个答案:

答案 0 :(得分:3)

在Matlab中(参见:Inf):

  

Inf返回正无穷大的IEEE®算术表示。

因此Inf生成的值大于所有其他数值。 -Inf生成的值保证小于任何其他数值。它通常用于您想要迭代地找到最大值并需要第一个值来进行比较时,它总是小于您的第一个比较。

根据维基百科(见:IEEE 754 Inf):

  

因此表示正负无穷大:

     

sign = 0表示正无穷大,1表示负无穷大。
  偏差指数=全1位   分数=全0位。

Python使用'-inf'具有相同的概念(参见注释6 here):

  

float也接受字符串“nan”和“inf”,带有可选前缀“+”或“ - ”表示非数字(NaN)和正或负无穷大。

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

答案 1 :(得分:2)

它只是在左侧指定minus infinity值。

分配该值可能看起来很奇怪,特别是距离cannot be negative。但看起来它似乎用于从最后一行的max计算中有效地删除这些条目。

如果Python没有" infinity" (我不知道Python)如果dist确实是一个距离(因此非负),你可以使用任何负值而不是{{ 1}}以实现相同的效果,即从-inf计算中删除这些条目。

答案 2 :(得分:2)

-Inf通常用于初始化变量,以便稍后可以在循环中进行比较时使用它。 例如,如果我想在函数中找到最大值(并且忘记了命令max)。然后我会做出类似的事情:

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