现在我将vector3值表示为列表.有没有办法减去其中2个像vector3值,比如
[2,2,2] - [1,1,1] = [1,1,1]
我应该使用元组吗?
如果它们都没有在这些类型上定义这些操作数,我可以改为定义它吗?
如果没有,我应该创建一个新的vector3类吗?
如果这是你最终经常做的事情,并且使用不同的操作,你应该创建一个类来处理这样的情况,或者更好地使用像Numpy这样的库.
否则,查找与zip内置函数一起使用的列表推导:
[a_i - b_i for a_i, b_i in zip(a, b)]
这是列表推导的替代方案.Map迭代遍历列表(后面的参数),同时这样做,并将它们的元素作为参数传递给函数(第一个arg).它返回结果列表.
map(operator.sub, a, b)
这段代码因为语法较少(对我来说更美观),而且对于长度为5的列表显然要快40%(参见bobince的评论).不过,任何一种解决方案都可行
如果您的列表是a和b,则可以执行以下操作:
map(int.__sub__, a, b)
但你可能不应该这样做.没有人会知道这意味着什么.
我不得不建议与NumPy以及
它不仅可以更快地进行矢量数学运算,而且还具有大量的便利功能.
如果你想要1d矢量更快的东西,试试vop
它类似于MatLab,但是免费和东西.这是你要做的一个例子
from numpy import matrix a = matrix((2,2,2)) b = matrix((1,1,1)) ret = a - b print ret >> [[1 1 1]]
繁荣.
如果您有两个名为"a"和"b"的列表,则可以执行以下操作: [m - n for m,n in zip(a,b)]