programa para multiplicar matrices campos calculados python built-in pep

python - para - campos calculados en django



¿Cuál es la función de Python como sum() pero para la multiplicación? producto()? (7)

Resumen

La función que está buscando se llamaría prod () o product () pero Python no tiene esa función. Entonces, necesitas escribir el tuyo (lo cual es fácil).

Pronunciamiento en prod ()

Si, eso es correcto Guido rechazó la idea de una función prod () incorporada porque pensó que rara vez se necesitaba.

Alternativa con reducir ()

Como sugirió, no es difícil crear su propio uso de reduce() y operator.mul() :

def prod(iterable): return reduce(operator.mul, iterable, 1) >>> prod(range(1, 5)) 24

En Python 3, la función reduce() se movió al módulo functools , por lo que necesitaría agregar:

from functools import reduce

Caso específico: Factoriales

Como nota al margen, el caso de uso de motivación principal para prod () es calcular factoriales. Ya tenemos soporte para eso en el módulo de matemáticas :

>>> import math >>> math.factorial(10) 3628800

Alternativa con logaritmos

Si sus datos consisten en flotantes, puede calcular un producto usando sum () con exponentes y logaritmos:

>>> from math import log, exp >>> data = [1.2, 1.5, 2.5, 0.9, 14.2, 3.8] >>> exp(sum(map(log, data))) 218.53799999999993 >>> 1.2 * 1.5 * 2.5 * 0.9 * 14.2 * 3.8 218.53799999999998

La función sum() Python devuelve la suma de números en un iterable.

sum([3,4,5]) == 3 + 4 + 5 == 12

Estoy buscando la función que devuelve el producto en su lugar.

somelib.somefunc([3,4,5]) == 3 * 4 * 5 == 60

Estoy bastante seguro de que existe tal función, pero no puedo encontrarla.


En realidad, Guido vetó la idea: http://bugs.python.org/issue1093

Pero, como se señala en ese tema, puedes hacer uno bastante fácil:

from functools import reduce # Valid in Python 2.6+, required in Python 3 import operator reduce(operator.mul, (3, 4, 5), 1)


Hay un prod() en numpy que hace lo que estás pidiendo.



Prefiero las respuestas b anteriores usando reduce() y la answer usando numpy.prod() , pero aquí hay otra solución que usa itertools.accumulate() :

import itertools import operator prod = list(itertools.accumulate((3, 4, 5), operator.mul))[-1]


Utilizar esta

def prod(iterable): p = 1 for n in iterable: p *= n return p

Como no hay una función de prod incorporada.


Numeric.product

(o

reduce(lambda x,y:x*y,[3,4,5])

)