我正在运行RuntimeWarning:在除法中遇到无效的值
import numpy a = numpy.random.rand((1000000, 100)) b = numpy.random.rand((1,100)) dots = numpy.dot(b,a.T)/numpy.dot(b,b) norms = numpy.linalg.norm(a, axis =1) angles = dots/norms ### Basically I am calculating angle between 2 vectors
我的a中有一些向量的范数为0。因此在计算角度时会发出运行时警告。
在考虑0范数的情况下,是否存在一种单线pythonic方法来计算角度?
angles =[i/j if j!=0 else -2 for i,j in zip(dots, norms)] # takes 10.6 seconds
但是需要很多时间。由于所有角度的值都在1到-1之间,我只需要10个最大值就可以了。这大约需要10.6秒,这太疯狂了。
您可以使用np.errstate上下文管理器忽略警告,然后将nans替换为所需的内容:
np.errstate
import numpy as np angle = np.arange(-5., 5.) norm = np.arange(10.) with np.errstate(divide='ignore'): print np.where(norm != 0., angle / norm, -2) # or: with np.errstate(divide='ignore'): res = angle/norm res[np.isnan(res)] = -2