我有一系列的x,y和z座標,我需要操作它。它們在三個元組的列表中,如{(x1,y1,z1),(x2,y2,z2),...}。哪個Python模塊適用於列表中的數據操作?
我需要加法,乘法和對數來操縱我的數據。
我想學習一個模塊,它和Awk語言一樣強大。
我有一系列的x,y和z座標,我需要操作它。它們在三個元組的列表中,如{(x1,y1,z1),(x2,y2,z2),...}。哪個Python模塊適用於列表中的數據操作?
我需要加法,乘法和對數來操縱我的數據。
我想學習一個模塊,它和Awk語言一樣強大。
如果你需要很多數組操作,然後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])
我不確定你究竟在幹什麼。你可以用列表解析做很多事情。舉例來說,如果你要打開的列表:
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
希望這有助於。
在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]
您不需要單獨的庫或模塊來執行此操作。 Python具有內置於語言中的列表解析,可讓您操作列表並執行計算。如果你想做大量的科學計算,或者你想要做大量的繁重數據處理,你可以使用numpy模塊來做同樣的事情。
在python 3.0中,reduce函數位於functools模塊中。 – sykora 2009-01-30 00:48:28