Форум сайта python.su
добрый день/вечер.
на питоне надо написать программу свертки, в связи с чем у меня возникли вопросы.
собственно свернуть надо два списка, s=, v=. в википедии описан алгоритм линейной свертки последовательностей http://ru.wikipedia.org/wiki/Свёртка_последовательностей
то есть s=, v= вроде как можно свернуть по этому алгоритму.
не совсем понимаю как *произвести перемножение этих двух последовательностей.* и еще не подскажите алгоритм отражения последовательности, я написал такой код, но он какой-то ненормальный)
j=0
sv=[]
while j<len(sn):
sv+=[0]
j+=1
print sv
i=0
while i<len(sn):
sv[i]=sn[len(sn)-1-i]
i+=1
Отредактировано (Окт. 12, 2011 13:22:45)
Офлайн
>>> x1 = range(10)
>>> x1
0: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> x2 = range(10)
>>> x2
1: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> out = map(lambda a,b:a*b, x1,x2[::-1])
>>> out
2: [0, 8, 14, 18, 20, 20, 18, 14, 8, 0]
Офлайн
> на питоне надо написать программу свертки
Встроенная функция reduce
Офлайн
import numpy as np
a=np.linspace(0,20,5)
b=np.linspace(0,20,5)
print np.dot(a,b[::-1])
Офлайн
eiyawiiДополнение нулями до нужной длины n так: lst+*(n-len(lst))
Таким образом возникает вопрос *как написать отражение, перемножение из этого алгоритма с википедии?*
Офлайн
Кстати, судя вот по этому: http://www.dsplib.ru/content/conv/conv.html все не так просто, как в википедии описано. или это разные линейные свертки?
Вот, например, приведенный там пример свертки последовательностей и по алгоритму википедии выливается в что-то типа этого:
In [1]: a = [2,1,3,-1]
In [2]: b = [-1,1,2]
In [3]: nout = len(a) + len(b) -1
In [4]: s = map(operator.mul, a + [0]*(nout-len(a)), (b + [0]*(nout-len(b)))[::-1])
In [5]: s
Out[5]: [0, 0, 0, -2, 0, 0]
Офлайн
2 sp3
не совсем понятно. этот код только для python 2.х подходит? если я пользуюсь функцией range() в idle python 3.2, то выдаёт следующее, соответственно дальше не работает
>>> x1=range(10)
>>> x1
range(0, 10)
class map(object)
| map(func, *iterables) --> map object
Офлайн
в третьем питоне range создает не список (как в ветке 2.*) а итератор (в 2 это xrange)
чтобы получить список можно сделать так:
x = list(range(10))
Офлайн
reduce посмотрите в модуле functools
Офлайн
сделайте import operator и прочитайте книжку по языку.
Офлайн