Python本身对向量操作的支持并不是很好,需要借助列表推导式或函数式编程来实现,例如:
>>> import random
# 生成随机测试数据
>>> x = random.sample(range(1000), 5)
>>> y = random.sample(range(1000), 5)
# 列表推导式,模拟向量减法
>>> [vecX-vecY for vecX, vecY in zip(x,y)]
[-171, -370, -66, 282, 231]
# 列表推导式,模拟向量减法
>>> f = lambda a, b: a-b
>>> [f(a,b) for a, b in zip(x,y)]
[-171, -370, -66, 282, 231]
# 函数式编程,map,模拟向量加法
>>> list(map(lambda a, b: a+b, x, y))
[1067, 488, 1486, 998, 327]
Python扩展库numpy本身提供的大量函数都具有向量化的特点,并且可以把普通的Python函数向量化,可以使得Python操作向量更方便:
>>> import numpy as np
# 定义一个普通的减法函数
>>> def sub(a, b): return a-b
# 把减法函数向量化
>>> vecSub = np.vectorize(sub)
>>> print(vecSub(x,y))
[-171 -370 -66 282 231]
# 把加法lambda表达式向量化
>>> vecAdd = np.vectorize(lambda a, b: a+b)
>>> print(vecAdd(x,y))
[1067 488 1486 998 327]