Кумулятивная сумма векторов из точки
У меня есть список векторов, список скаляров и начальная точка, представленная кортежем.
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 ответов:
Только что понял, что я могу создать функцию генератора вместо использования
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
Как насчет добавления вспомогательной функции для 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)]
Вы можете использовать numpy для векторных вычислений. Используйте numpy.функция точки, чтобы умножить ваши скаляры с вашей матрицей векторов. Наконец, добавьте начальный вектор .скалярное произведение.
Comments