来自一个点的向量的累积和

时间:2016-05-09 14:06:10

标签: python python-3.x accumulate

我有一个向量列表,一个标量列表和一个由元组表示的起点。

vecs = [(1,1), (2,3), (-1,1)]
scalars = [2, 3, 2]
start = (-5,0)

我有一个函数可以将一个向量的“k次”加到一个点上。

def add_vector(point, k, vec):
    return (point[0]+k*vec[0], point[1]+k*vec[1])

我想得到折线上的点列表,以便:

result[0] = start
result[n+1] = add_vector(result[n], scalars[n], vecs[n]) 

我想过使用itertools.accumulate,但func参数必须是两个参数的函数。有什么想法吗?

3 个答案:

答案 0 :(得分:1)

我想可以创建一个生成器函数,而不是使用itertools.accumulate ...

def accumulate_vector(start, scalars, vecs):
    prev = start
    yield start
    for k, vec in zip(scalars, vecs):
        prev = add_vector(prev, k, vec)
        yield prev

答案 1 :(得分:0)

如何为add_vector添加辅助函数(func()在以下代码中):

from itertools import accumulate

def add_vector(point, k, vec):
    return (point[0]+k*vec[0], point[1]+k*vec[1])

def func(data1, data2): # data : a tuple (vector, scalar)
    vec1, k1 = data1
    vec2, k2 = data2
    return (add_vector(vec1, k2, vec2), k2)

vecs = [(1,1), (2,3), (-1,1)]
scalars = [2, 3, 2]
start = (-5,0)

temp = zip([start]+vecs, [1]+scalars)
result = [data[0] for data in accumulate(temp, func)]

print(result) # [(-5, 0), (-3, 2), (3, 11), (1, 13)]

答案 2 :(得分:0)

你可以使用numpy进行矢量计算。 使用numpy.dot函数将标量与向量矩阵相乘。最后将开始向量添加到.dot产品中。