python类中的函数-ag凯发k8国际
各位大神好!
我在学习的一个线代基础课中,需要用到python来计算向量,其中有一段代码是这样的:
from math import sqrt, acos, pi #导入sqrt, acos, pi
from decimal import decimal, getcontext
getcontext().prec = 30
class vector():
cannot_normalize_zero_vector_msg = 'cannot normalize the zero vector'
def __init__(self, coordinates):
try:
if not coordinates:
raise valueerror
self.coordinates = tuple([decimal(x) for x in coordinates])
self.dimension = len(self.coordinates)
except valueerror:
raise valueerror('the coordinates must be nonempty')
except typeerror:
raise typeerror('the coordinates must be an iterable')
def plus(self, v):
"""向量加法"""
new_coordinates = [x y for x, y in zip(self.coordinates, v.coordinates)]
return vector(new_coordinates)
def dot(self, v):
"""计算向量点积"""
return sum([x * y for x, y in zip(self.coordinates, v.coordinates)])
def angle_with(self, v, in_degrees = false):
"""计算向量夹角"""
try:
u1 = self.normalized()
u2 = v.normalized()
angle_in_radians = acos(u1.dot(u2))
if in_degrees:
degrees_per_radian = 180. / pi
return angle_in_radians * degrees_per_radian
else:
return angle_in_radians
except exception as e:
if str(e) == self.cannot_normalize_zero_vector_msg:
raise exception('cannot compute an angle with the zero vector')
else:
raise e
print('\n向量加法')
v = vector([8.218, -9.341])
w = vector([-1.129, 2.111])
print(v.plus(w))
print('\n计算向量夹角')
v = vector(['3.183', '-7.627'])
w = vector(['-2.668', '5.319'])
print(v.angle_with(w))
v = vector(['7.35', '0.221', '5.188'])
w = vector(['2.751', '8.259', '3.985'])
print(v.angle_with(w, in_degrees=true))
在向量加法的代码中,这个 self.coordinates 是 v = vector([8.218, -9.341]) 传入的值,v.coordinates 是 w = vector([-1.129, 2.111]) 传入的值,我有个问题就是,为什么 v 后面要加上coordinates 呢?这个 v 是类似 self 那样作为引用,用于访问这个属性 coordinates 吗?为什么不可以直接使用 v 呢?
另外在“计算夹角向量”的代码中:
angle_in_radians = acos(u1.dot(u2))
中的 (u1.dot(u2)) 该怎么理解好呢?
请大神赐教,谢谢!
总结
以上是ag凯发k8国际为你收集整理的python类中的函数_python类中的函数问题的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇:
- 下一篇: