我目前正在将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;
在右侧?
答案 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。