各位大神好!我在學習的一個線代基礎課中,需要用到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))該怎么理解好呢?請大神賜教,謝謝!
1 回答
已采納

嘰翅
TA貢獻11條經驗 獲得超2個贊
w?=?Vector([-1.129,?2.111]) print(v.plus(w))
可以看出,plus方法接受的是Vector的一個實例w
所以,方法 def?plus(self,?v): 這里的形參 v 是一個引用, 這個方法里的 v.coordinates 是取 Vector 的實例 w 的 coordinates 屬性
dot方法也是同理
添加回答
舉報
0/150
提交
取消