首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Np.linalg.norm( and )与np.sqrt(np.sum(np.square(And))的差异)?

Np.linalg.norm( and )与np.sqrt(np.sum(np.square(And))的差异)?
EN

Stack Overflow用户
提问于 2022-02-19 16:13:14
回答 1查看 301关注 0票数 2

我试图为K-最近邻算法找到两幅图像之间的欧几里德距离。然而,在探索一些距离函数时,我面临着这种差异。

代码语言:javascript
复制
norm1 = np.sqrt(np.sum(np.square(image1-image2))))
norm2 = np.linalg.norm(image1-image2)

这两条线似乎给出了不同的结果。用简单的3D Numpy数组做同样的尝试,我似乎得到了相同的结果,但是对于我的图像,答案是不同的。我不知道哪一个是正确的使用,所以,任何帮助都欢迎,谢谢提前!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-02-19 17:27:08

实际上,这两种方法给出了不同的结果--在您的情况下--,而方法在数学上是相等的。这是因为image1image2的类型很可能是uint8,而没有将结果转换为更大的类型。这意味着使用np.square只会给出错误的结果--,因为溢出了。事实上,减法已经给出了错误的结果。您需要将输入转换为更大的类型,以避免溢出。下面是一个示例:

代码语言:javascript
复制
norm1 = np.sqrt(np.sum(np.square(image1.astype(np.int32)-image2.astype(np.int32))))
norm2 = np.linalg.norm(image1.astype(np.int32)-image2.astype(np.int32))

这样,您应该得到几乎相同的结果(可能有几个ULP的差异,在这里应该可以忽略不计)。

请注意,与np.sqrt+np.sum+np.square.相比,np.linalg.norm很可能大大加快了,因为它不应该创建临时数组

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71186765

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档