我很难让这个工作,因为所有的答案,我可以找到,大多数答案更集中于向量在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()
3条答案
按热度按时间t3psigkw1#
出于准确性原因,您应该使用数学hypot来避免任何溢出。
math.hypot(x, y)
:返回欧氏范数sqrt(x*x + y*y)
。这是从原点到点(x,y)的向量的长度。这将给予:
f0brbegy2#
可以像这样定义
vector_mag
:那么调用你的方法就像这样简单:
5q4ezhmt3#
向量的大小是标量值;换句话说,它是一个单独的数。向量是一个数的集合,所以试图将标量转换为向量是没有意义的。只要返回大小不变。