2009-01-29 19 views

回答

6

如果你需要很多数组操作,然后numpy的是蟒蛇

>>> import numpy 
>>> data = numpy.array([(2, 4, 8), (3, 6, 5), (7, 5, 2)]) 
>>> data 
array([[2, 4, 8], 
     [3, 6, 5], 
     [7, 5, 2]]) 

>>> data.sum() # product of all elements 
42 
>>> data.sum(axis=1) # sum of elements in rows 
array([14, 14, 14]) 
>>> data.sum(axis=0) # sum of elements in columns 
array([12, 15, 15]) 
>>> numpy.product(data, axis=1) # product of elements in rows 
array([64, 90, 70]) 
>>> numpy.product(data, axis=0) # product of elements in columns 
array([ 42, 120, 80]) 
>>> numpy.product(data)  # product of all elements 
403200 

或元素明智的操作使用数组

>>> x,y,z = map(numpy.array,[(2, 4, 8), (3, 6, 5), (7, 5, 2)]) 
>>> x 
array([2, 4, 8]) 
>>> y 
array([3, 6, 5]) 
>>> z 
array([7, 5, 2]) 

>>> x*y 
array([ 6, 24, 40]) 
>>> x*y*z 
array([ 42, 120, 80]) 
>>> x+y+z 
array([12, 15, 15]) 

元素明智的数学运算的最佳选择,例如

>>> numpy.log(data) 
array([[ 0.69314718, 1.38629436, 2.07944154], 
     [ 1.09861229, 1.79175947, 1.60943791], 
     [ 1.94591015, 1.60943791, 0.69314718]]) 
>>> numpy.exp(x) 
array([ 7.3890561 , 54.59815003, 2980.95798704]) 
7

我不确定你究竟在干什么。你可以用列表解析做很多事情。举例来说,如果你要打开的列表:

coords = [(x1, y1, z1), (x2, y2, z2), (x3, y3, z3)] # etc 

成一个元组(x1+x2+x3, y1+y2+y3, z1+z2+z3),那么你可以做:

sums = (sum(a[0] for a in coords), sum(a[1] for a in coords), sum(a[2] for a in coords)) 

事实上,有经验的Python程序员可以编写为:

sums = map(sum, zip(*coords)) 

虽然这对初学者来说看起来有点像魔法。

如果你想跨坐标乘法,那么这个想法是相似的。唯一的问题是python没有相当于sum的内置乘法。我们可以建立我们自己:

import operator 
def prod(lst): 
    return reduce(operator.mul, lst) 

然后你可以乘以你的元组的协调明智:

prods = map(prod, zip(*coords)) 

如果你想要做的事与乘法(内产品吗?),这将需要更复杂多一点工作(尽管这不会很困难)。

我不知道你想采取什么对数。但你可以在数学模块中找到日志功能:

from math import log 

希望这有助于。

1

在Python 3中,reduce函数不见了。你可以这样做:

def prod(lst): 
    return [x*y*z for x, y, z in list(zip(*lst))] 

coords = [(2, 4, 8), (3, 6, 5), (7, 5, 2)] 
print(prod(coords)) 
>>> [42, 120, 80] 
+0

在python 3.0中,reduce函数位于functools模块中。 – sykora 2009-01-30 00:48:28

1

您不需要单独的库或模块来执行此操作。 Python具有内置于语言中的列表解析,可让您操作列表并执行计算。如果你想做大量的科学计算,或者你想要做大量的繁重数据处理,你可以使用numpy模块来做同样的事情。