1. 程式人生 > 實用技巧 >人工智慧必備數學知識學習筆記4:零向量

人工智慧必備數學知識學習筆記4:零向量

程式碼實現:

1. 在Vector.py編寫程式碼

 1 #向量類
 2 #__values() 與 _values()區別更多體現在繼承上,如果是在類的內部使用時官方建議使用_values()發方法
 3 
 4 
 5 class Vector:
 6 
 7     def __init__(self,lst):
 8         self._values = list(lst)#將陣列賦值給向量類中(注:使用list方法將列表lst複製一份保證他的不被外界呼叫時修改)
 9 
10     #零向量類方法:引數1:為當前的類(cls) 引數2:維度(dim)  返回dim維的零向量
11 @classmethod 12 def zero(cls,dim): 13 return cls([0] * dim) 14 15 #向量加法,返回結果向量 16 def __add__(self, another): 17 # assert判斷傳入的向量維度是否相等 18 assert len(self) == len(another),\ 19 "Error in adding. Length of vectors must be same." 20 return
Vector([a+b for a,b in zip(self,another)])#使用zip()方法將兩個向量取出來 21 22 # 向量減法 23 def __sub__(self, another): 24 assert len(self) == len(another), \ 25 "Error in adding. Length of vectors must be same." 26 return Vector([a - b for a, b in zip(self, another)]) 27 28 #
向量乘法(數乘陣列),返回數量乘法的結果向量:self * k 29 def __mul__(self, k): 30 return Vector([k * e for e in self]) 31 32 # 向量乘法(陣列乘數),返回數量乘法的結果向量:k * self 33 def __rmul__(k, self): 34 return k * self #此處直接呼叫的是上方的乘法函式 35 36 #返回向量取正的結果向量 37 def __pos__(self): 38 return 1 * self 39 40 # 返回向量取負的結果向量 41 def __neg__(self): 42 return -1 * self 43 44 #返回向量迭代器(當有迭代器時,zip()方法中就不用再次傳入兩個向量陣列,直接傳入向量物件即可<zip(self._values,another._values)>) 45 def __iter__(self): 46 return self._values.__iter__() 47 48 #取向量的index個元素 49 def __getitem__(self, index): 50 return self._values[index] 51 52 #返回向量的長度(有多少個元素) 53 def __len__(self): 54 return len(self._values) 55 56 # 向量展示(系統呼叫) 57 def __repr__(self): 58 return "Vector({})".format(self._values) 59 60 # 向量展示(使用者呼叫) 61 def __str__(self): 62 return "({})".format(", ".join(str(e) for e in self._values))#通過遍歷 self.__values 將e轉成字串通過逗號加空格來連結放入大括號中 63 64 # u = Vector([5,2]) 65 # print(u)

2.在main_vector.py展示中編寫:

 1 from playLA.Vector import Vector
 2 
 3 if __name__ == "__main__":
 4 
 5     vec = Vector([5,2])
 6     print(vec)
 7     print(len(vec))#列印向量的維度
 8     print("vec[0] = {}, vec[1] = {}".format(vec[0],vec[1]))
 9 
10     #向量加法
11     vec2 = Vector([3,1])
12     print("{} + {} = {}".format(vec,vec2,vec+vec2))
13     #向量減法
14     print("{} - {} = {}".format(vec, vec2, vec - vec2))
15     #向量乘法(向量乘以數)
16     print("{} * {} = {}".format(vec,3,vec * 3))
17     # 向量乘法(數乘以向量)
18     print("{} * {} = {}".format(3, vec, 3 * vec))
19     # 向量取正
20     print("+{} = {}".format(vec, +vec))
21     # 向量取負
22     print("-{} = {}".format(vec, -vec))
23 
24     #零向量
25     zero2 = Vector.zero(2)
26     print(zero2)
27     #向量加上零向量
28     print("{} + {} = {}".format(vec, zero2, vec + zero2))

3.執行main_vector.py結果為:

 1 /Users/liuxiaoming/PycharmProjects/LinearAlgebra/venv/bin/python /Applications/PyCharm.app/Contents/plugins/python/helpers/pydev/pydevconsole.py --mode=client --port=57184
 2 import sys; print('Python %s on %s' % (sys.version, sys.platform))
 3 sys.path.extend(['/Users/liuxiaoming/PycharmProjects/LinearAlgebra'])
 4 PyDev console: starting.
 5 Python 3.8.2 (v3.8.2:7b3ab5921f, Feb 24 2020, 17:52:18) 
 6 [Clang 6.0 (clang-600.0.57)] on darwin
 7 >>> runfile('/Users/liuxiaoming/PycharmProjects/LinearAlgebra/main_vector.py', wdir='/Users/liuxiaoming/PycharmProjects/LinearAlgebra')
 8 (5, 2)
 9 2
10 vec[0] = 5, vec[1] = 2
11 (5, 2) + (3, 1) = (8, 3)
12 (5, 2) - (3, 1) = (2, 1)
13 (5, 2) * 3 = (15, 6)
14 3 * (5, 2) = (15, 6)
15 +(5, 2) = (5, 2)
16 -(5, 2) = (-5, -2)
17 (0, 0)
18 (5, 2) + (0, 0) = (5, 2)