亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

python類中的函數問題

python類中的函數問題

杰噠噠 2018-01-07 12:31:05
各位大神好!我在學習的一個線代基礎課中,需要用到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方法也是同理

查看完整回答
反對 回復 2018-01-07
  • 1 回答
  • 0 關注
  • 1424 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號