python类中的函数_python类中的函数问题
各位大神好!
我在學(xué)習(xí)的一個線代基礎(chǔ)課中,需要用到Python來計算向量,其中有一段代碼是這樣的:
from math import sqrt, acos, pi #導(dǎo)入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)) 該怎么理解好呢?
請大神賜教,謝謝!
總結(jié)
以上是生活随笔為你收集整理的python类中的函数_python类中的函数问题的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: android 可以搜索到热点 连接时显
- 下一篇: 原生sql 查询返回一个实体_pytho