当前位置:  开发笔记 > 编程语言 > 正文

哪个Python模块适合列表中的数据操作?

如何解决《哪个Python模块适合列表中的数据操作?》经验,为你挑选了2个好方法。

我有一系列x,y和z坐标,我需要操纵它.它们位于三个元组的列表中,如{(x1,y1,z1),(x2,y2,z2),...}.

我需要加法,乘法和对数来操纵我的数据.

我想研究一个与Awk -language一样强大的模块.



1> John Fouhy..:

我不确定你到底想要什么.你可以用列表推导做很多事情.例如,如果要转换列表:

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

希望这可以帮助.



2> 小智..:

如果你需要很多数组操作,那么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])

推荐阅读
Gbom2402851125
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有