人工智能必备数学知识学习笔记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)
原文地址:https://www.cnblogs.com/liuxiaoming123/p/13434947.html