【问题标题】:Get the magnitude of a vector (x,y)获取向量 (x,y) 的大小
【发布时间】:2015-09-10 12:54:05
【问题描述】:

我正在努力让它发挥作用,因为我能找到的所有答案都更侧重于 numpy 数组中的向量,而不是像我在类 (OOP) 中的那样。 (我希望我的措辞是正确的,如果我不是,请原谅)。

我想求一个向量 (x,y) 的大小,这是我的代码:

class Vector(object):

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

我有代码可以将两个向量相加和相减,但是如何用这个等式得到大小:

magnitude = math.sqrt(sum(v**2 for v in vector))

这是我的代码,但它没有给我我需要的东西:

def vector_mag(self):
        x_vector = self.x
        y_vector = self.y
        vector = (x_vector, y_vector)
        magnitude = math.sqrt(sum(v**2 for v in vector))
        return Vector(magnitude)

这给出了一个错误提示:

第 22 行,在

打印vector.vector_mag()

第 14 行,在 vector_mag 中

返回向量(大小)

TypeError: init() 只需要 3 个参数(给定 2 个)

所以当我像这样在返回部分添加另一个“字符串”时......:

return Vector("向量幅度为:",幅度)

...程序运行但给出了一个奇怪的结果。

我做错了什么?

这是我的“完整”代码:

导入数学

类向量(对象):

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

  def vector_mag(self):
       x_vector = self.x
       y_vector = self.y
       vector = (x_vector, y_vector)
       magnitude = math.sqrt(sum(v**2 for v in vector))
       return Vector("Vector magnitude is: ", magnitude)

vector1 = Vector(10, 1)

vector2 = Vector(20, 2)

vector_list = [(vector1), (vector2)]

对于vector_list中的向量:

 print vector.vector_mag()

【问题讨论】:

  • 为什么要从vector_mag调用返回另一个向量?不应该是一个数字吗?
  • 你是对的 tukasz,我只是在那儿很愚蠢,谢谢 :)

标签: python python-2.7 oop vector


【解决方案1】:

你可以像这样定义vector_mag

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

那么调用你的方法就这么简单:

vector1 = Vector(10, 1)
print 'Magnitude =', abs(vector1)

【讨论】:

  • 感谢您抽出宝贵时间@Noctis,我马上试试!
  • 有效!再次感谢@Noctis
【解决方案2】:
return Vector(magnitude)

向量的大小是一个标量值;换句话说,它是一个数字。向量是数字的集合,因此尝试将标量转换为向量是没有意义的。只需返回大小不变。

return magnitude

【讨论】:

  • 谢谢@Kevin,我得赶紧走出家门,我会尽快尝试,但我想我已经尝试过了。我会尽快通知你
  • 有效!谢谢@Kevin
【解决方案3】:

出于准确性原因,您应该使用math hypot 以避免任何溢出。

from math import hypot

def __abs__(self):
    return hypot(self.x, self.y)

Math.hypot(x, y):返回欧几里得范数,sqrt(xx + yy)。这是向量从原点到点 (x, y) 的长度。

这将给出:

from math import hypot
class Vector(object):

    def __init__(self, x, y):
        self.x = x
        self.y = y
    def __abs__(self):
        return hypot(self.x, self.y)

v=Vector(3,1)
magnitude = abs(v)

【讨论】:

  • 哇,这非常有用,谢谢@Guillaume。我会尽快尝试更新!干杯:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-05-11
  • 1970-01-01
  • 1970-01-01
  • 2018-01-19
  • 2011-01-30
  • 2018-08-08
  • 2016-05-07
相关资源
最近更新 更多