3

x、y、および z 座標のシーケンスがあり、これを操作する必要があります。それらは、{(x1, y1, z1), (x2, y2, z2), ...} のような 3 つのタプルの 1 つのリストにあります。

データを操作するには、足し算、掛け算、対数が必要です。

Awk 言語と同じくらい強力なモジュールを研究したいと思います。

4

4 に答える 4

8

あなたが何を求めているのか正確にはわかりません。リスト内包表記で多くのことができます。たとえば、リストをめくりたい場合:

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))

乗算(内積?)でもっと複雑なことをしたい場合は、もう少し作業が必要になります(ただし、それほど難しくはありません)。

対数を何にしたいのかわかりません。ただし、log関数は数学モジュールにあります。

from math import log

お役に立てれば。

于 2009-01-30T00:10:42.370 に答える
7

多くの配列操作が必要な場合は、Pythonで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])
于 2009-01-30T11:28:15.513 に答える
2

これを行うために別のライブラリやモジュールは必要ありません。Python には言語に組み込まれたリスト内包表記があり、リストを操作して計算を実行できます。numpy モジュールを使用して、多くの科学計算を実行したい場合、または大量の計算処理を実行したい場合、同じことを行うことができます。

于 2009-01-30T11:42:37.997 に答える
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]
于 2009-01-30T00:38:38.740 に答える