Векторная алгебра в функционале - PullRequest
0 голосов
/ 06 августа 2010

Как реализовать векторную сумму, используя функциональное программирование на python.
Этот код работает для n <100, но не для n> 1000.

from itertools import *

#n=10000 # do not try!!!
n=100
twin=((i,i**2,i**3) for i in xrange(1,n+1))

def sum(x=0,y=0):
    return x+y

def dubsum(x,y):
    return (reduce(sum,i) for i in izip(x,y) )

print [ i for i in reduce(dubsum,twin) ]

Ответы [ 2 ]

2 голосов
/ 06 августа 2010

Например:

print [sum(e) for e in izip(*twin)]

Или даже более функционально:

print map(sum, izip(*twin))

Обратите внимание, что сжатие очень похоже на перенос двумерного массива.

>>> zip([1, 2, 3, 4],
...     [5, 6, 7, 8])  ==  [(1, 5),
...                         (2, 6),
...                         (3, 7),
...                         (4, 8)]
True
0 голосов
/ 06 августа 2010

Python построил в сумме, зачем:

from itertools import *

n=10000
twin=((i,i**2,i**3) for i in xrange(1,n+1))
x,y,z= izip(*twin)

print sum(x),sum(y),sum(z)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...