我有一系列x,y和z坐标,我需要操纵它.它们位于三个元组的列表中,如{(x1,y1,z1),(x2,y2,z2),...}.
我需要加法,乘法和对数来操纵我的数据.
我想研究一个与Awk -language一样强大的模块.
我不确定你到底想要什么.你可以用列表推导做很多事情.例如,如果要转换列表:
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
希望这可以帮助.
如果你需要很多数组操作,那么numpy是python中的最佳选择
>>> 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])