在Python 3中使用MagicMethods计算欧几里德距离

2023-12-02

我有一个为我计算欧几里德距离的代码:

class Point:
    """A point in two-dimensional space."""

    def __init__(self, x, y):
        self._x = x
        self._y = y

    def __eq__(self, other):
        return self._x == other._x and self._y == other._y

    def distance(self, other):
        new_x = self._x - other._x
        new_y = self._y - other._y
        print(new_x,'  ',new_y)
        return (new_x ** 2 + new_y ** 2) ** 0.5

p1 = Point(10, 4)
p2 = Point(3, 1)


print('Euclidean distance : 'p1.distance(p2))

但是,现在我想使用 python 中的魔术方法来计算这个距离,比如__sub__ and __pow__。我已经成功实施__sub__但我不知道如何实施__pow__和平方根。到目前为止,这是我的代码:

class Point_1(object):

    def __init__(self, x, y):
        self._x = x
        self._y = y


    def setX(self, x,y):
        self._x = x
        self._y = y

    def getX(self):
        return self._x,self._y


    def __sub__ (self, other ):
        return Point_1(self._x - other._x, self._y - other._y)

    def __pow__(self,p):
        return Point_1(self._x ** p, self._y **p)




p1 = Point_1(10,4)
print(p1.getX())

p2 = Point_1(3,1)
print(p2.getX())

p3 = p1 - p2

我如何使用魔术方法来实现公式的其余部分。我真的很困惑。我将不胜感激。


正如已经提到的,使用 Point 类来表示向量可能不是一个好主意。在简单的程序中这没问题,但在更复杂的代码中可能会变得混乱。通常的做法是使点不可变。但不管怎么说...

为了进行欧几里德距离运算,我们可以“滥用”新的__matmul__魔法方法。该方法由@操作员。这是一个基于您的代码的简短演示。请注意,我正在使用x and y作为属性,没有充分的理由将它们标记为私有。

class Point:
    def __init__(self, x, y):
        self.x = x
        self.y = y

    def __repr__(self):
        return "Point({}, {})".format(self.x, self.y)

    def __add__ (self, other ):
        return Point(self.x + other.x, self.y + other.y)

    def __sub__ (self, other ):
        return Point(self.x - other.x, self.y - other.y)

    def __pow__(self, p):
        return Point(self.x ** p, self.y **p)

    def __abs__(self):
        d = self ** 2
        return (d.x + d.y) ** 0.5

    def __matmul__(self, other):
        ''' Euclidean distance between self & other '''
        return abs(self - other)

# Test

a = Point(5, 6)
b = Point(2, 2)
print(a + b)
print(a - b)
print(a @ b)

output

Point(7, 8)
Point(3, 4)
5.0
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在Python 3中使用MagicMethods计算欧几里德距离 的相关文章

随机推荐

  • Magento - 如何在结帐过程中向订单添加发票费用

    如何使用我的付款模块将发票费用添加到订单中 我想这应该在结帐过程中通过我的付款方式模型完成 也许我应该创建一个项目 产品并将其添加到购物车 报价 订单对象中 但我不知道如何做这些事情 请帮忙 尽管有可能 但这并不适合胆怯的人 以下是向总计区
  • 更改 HREF 后 IE 忘记了 A-Tag 的主机名

    我设置了href 的属性 a 在项目中动态标记 在其他时候 我检查 a 的 DOM 属性称为hostname 以确定它是否是内部链接 基本上 这就是发生的情况 a href my first link MyLink a div div JS
  • Android Studio 3.6.1 与 Gradle 插件版本 3.6.1 和 Gradle 版本 5.6.4 无法正常工作

    我的应用程序运行良好 我刚刚更新了安卓工作室3 6 1 更新 Android Studio 后 我收到此对话框 我将更新 Gradle 插件的版本 如下所示 更新后 我的应用程序崩溃并出现以下错误 java lang NoClassDefF
  • .htaccess 重写规则不会使用 unicode 字符

    我正在使用以下 ModRewrite 来使我的网址看起来更干净 RewriteEngine On RewriteRule a zA Z0 9 index php key 1 它允许使用字母和数字就好 但当我尝试使用 时 它会产生 400 错
  • if 和 elseif 有什么区别?

    这应该是一个简单的问题 我有一个简单的 if else 语句 与此有区别吗
  • JavaFX 2 自定义弹出窗格

    JavaFX 2 颜色选择器有一个按钮 可以弹出颜色选择器窗格 如下所示 我想做类似的事情 因为我希望在单击按钮时弹出一个自定义窗格 并在单击其他内容时消失 在我的例子中是一些图像缩略图 实现这一目标的最佳方法是什么 我应该使用 Conte
  • iOS isKindOfClass 和 isMemberOfClass 之间的区别

    两者有什么区别isKind of aClass AnyClass 和isMember of aClass AnyClass 斯威夫特函数 Objective C 中的原始问题 两者有什么区别isKindOfClass Class aClas
  • datepicker 不会触发 onchange 事件

    我有两个输入日期字段 一个通过 JQuery datepicker 生成日期 我希望第二个通过 onblur 或 onchange 事件从第一个输入中获取值 当我手动输入日期时它工作正常 但一旦通过 datepicker 输入 它不会触发第
  • 调试代码时 Ninject 出现无源可用错误

    我已经使用NuGet安装了最新版本的Ninject v2 2 1 4 然后我创建了自己的 NinjectDependencyResolver 归功于亚当 弗里曼和史蒂夫 桑德森 public class NinjectDependencyR
  • 第一次运行flutter时报错:没有找到pubspec.yaml文件

    我试着跟随Get Stated here https flutter io setup windows And got gt flutter run Error No pubspec yaml file found This command
  • Firebase 数据库规范化

    所以我制作了一个简单的应用程序 一个三轮车巡逻应用程序 您可以通过登录并填写表格来举报鲁莽的三轮车司机 在我们的城市这里没有任何问题 报告表格包含 created at description lat lng plateNumber 到目前
  • 用于按行“连接 If”的 VBA 用户定义函数

    我有一些关于是否为特定站点执行特定 服务 例如鸟类调查 的数据 每项服务都有 是 或 否 E G A 列包含站点名称 例如 A B C D 和 E A1 中标题为 站点名称 A2 中标题为 A 依此类推 B 列 B1 中包含 鸟类调查 然后
  • 捕获分段违规并继续生活

    我正在编写一个程序来检查它自己的地址空间 具体来说 我关心所有 malloc 的数据块 如果有一些系统调用来获取它们的列表 那就太棒了 对于我的应用程序 我不能使用 LD PRELOAD wrap 或任何额外的命令行选项 如果有办法做到这一
  • 使 arraylist 上的 select -unique 返回 arraylist 而不是字符串

    我在下面的类中有三个数组列表 我想让它们保持独特 但是 如果数组列表中只有一项 字符串 并且您使用 select unique 或任何其他方法来实现此目的 它将返回字符串而不是字符串列表 用 包围它也不起作用 因为这会将其转换为数组而不是数
  • Android内存泄漏,没有静态变量

    我是一名初级 Android 开发人员 作为一个实践项目 我正在尝试制作一个可以拍照 将其保存到外部存储并在 ImageView 中显示的活动 几乎一切似乎都正常 但是 我似乎有内存泄漏 当屏幕方向改变时 我相信活动会被破坏 然后重新创建
  • 存储过程中的账本报告逻辑

    我有一个名为 患者分类帐报告 的存储过程 我需要在其中显示患者的日常交易详细信息和余额金额 我正在为您提供以下代码中的一个采样数据 这些数据是如何插入到我的临时表中的sp create table Patient ledger PATIEN
  • Python 是否有相当于部分类的东西?

    使用 新 样式类 我使用的是 python 3 2 有没有办法将一个类拆分为多个文件 我有一个大类 从面向对象设计的角度来看 考虑到耦合等 它实际上应该是一个类 但是为了便于编辑类 最好将其拆分为几个文件 如果您的问题确实只是在编辑器中处理
  • “gcloud builds 提交...”有什么作用?

    我想知道什么gcloud 构建提交做 就我而言 我正在运行GCloud运行教程 The 官方文档指出它提交构建 这不是一个特别有用的信息 有人可以提供更多背景信息吗 什么是build 一个图像 jar 文件 这个 构建 被提交到哪里 提交
  • 更改 PHP 中包含内容的相对链接路径

    我的服务器根目录下有一个 PHP 文件 索引 php 哪个include的 DIR main php 现在 DIR main php 具有到许多附近文件的相对链接 所有相关链接均已损坏 我可以通过任何方式更改相对 URL 基本路径对于链接
  • 在Python 3中使用MagicMethods计算欧几里德距离

    我有一个为我计算欧几里德距离的代码 class Point A point in two dimensional space def init self x y self x x self y y def eq self other ret