用于+ - *的python缩减函数

时间:2014-03-13 23:10:03

标签: python math vector operations

我需要在point3值上使用3个数学运算函数。我想知道是否有人可以为更好地编写这些功能以更清洁和浓缩的方式说明。

谢谢。

ptA = [10.0, 20.0, 30]
ptB = [50, 50 ,50]
percent = .50


def addPoint3(ptA,ptB):

    idA = ptA[0] + ptB[0]
    idB = ptA[1] + ptB[1]
    idC = ptA[2] + ptB[2]

    return [idA,idB,idC]

def subtractPoint3(ptA,ptB):

    idA = ptA[0] - ptB[0]
    idB = ptA[1] - ptB[1]
    idC = ptA[2] - ptB[2]

    return [idA,idB,idC]

def percentagePoint3(ptA,percentage):

    idA = ptA[0] * percentage
    idB = ptA[1] * percentage
    idC = ptA[2] * percentage

    return [idA,idB,idC]



add = addPoint3(ptA,ptB)
sub = subtractPoint3(ptA,ptB)
per = percentagePoint3(ptA,percent)
print add,sub,per

4 个答案:

答案 0 :(得分:5)

您可以使用ziplist comprehensions来简化这些操作。例如:

def addPoint3(ptA, ptB):
    return [a+b for a, b in zip(ptA, ptB)]

def percentagePoint3(ptA, percentage):
    return [pt * percentage for pt in ptA]

您也可以考虑实现一个类,而不是列表,因此您可以将它们定义为实例方法(有关此示例,请参阅RicardoCárdenes的回答)。

答案 1 :(得分:4)

答案 2 :(得分:0)

尝试:

[ptA + ptB for ptA,ptB in zip(ptA, ptB)]

改变运营商的替代等。

答案 3 :(得分:0)

如果速度是一个问题,那么python中最快的矢量化操作不是来自列表,而是来自numpy。例如:

import numpy as np

ptA = np.array([10.0,20.0,30])
ptB = np.ones(3)*50

pt3 = ptA + ptB #done with c/blas libraries under the hood.