2009-01-29 43 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模塊來做同樣的事情。