python 获取向量(x,y)的大小

vwoqyblh  于 2023-02-21  发布在  Python
关注(0)|答案(3)|浏览(128)

我很难让这个工作,因为所有的答案,我可以找到,大多数答案更集中于向量在numpy数组,而不是像我在类(OOP)。(我希望我的措辞都是正确的方式,请原谅,如果我不是)。
我想求一个向量(x,y)的大小,这是我的代码:

class Vector(object):

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

我有代码可以求和和减去两个向量,但如何得到的幅度与以下方程:
幅值= math. sqrt(总和(向量中v的v**2))
这是我的代码,但它没有给我我所需要的:

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_mag()
第14行,在向量放大器中
返回向量(幅度)
类型错误:init()正好接受3个参数(给定2个)
因此,当我在return部分添加另一个"string"时,如下所示......:
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)

向量1 =向量(10,1)
向量2 =向量(20,2)
向量列表=[(向量1),(向量2)]
对于vector_list中的向量:

print vector.vector_mag()
t3psigkw

t3psigkw1#

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

from math import hypot

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

math.hypot(x, y):返回欧氏范数sqrt(x*x + y*y)。这是从原点到点(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)
f0brbegy

f0brbegy2#

可以像这样定义vector_mag

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

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

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

5q4ezhmt3#

return Vector(magnitude)

向量的大小是标量值;换句话说,它是一个单独的数。向量是一个数的集合,所以试图将标量转换为向量是没有意义的。只要返回大小不变。

return magnitude

相关问题