2011-08-06 5 views
1

私はプログラムでたくさんのxyzベクトルを使っています。私は変数を(offset_x、offset_yなどのように)それぞれに与えることは面倒であり、コードに悩まされているほど十分に使用しています。さて、x、y、xの各セットをoffset =(x、y、z)などのタプルに入れることができましたが、offset [0]のようなものを使うと、私が望むように、dictの使用はあまりにも非効率的だと思われます。 Numpyは別の選択肢ですが、多くの人がそれを提案していますが、Poor numpy.cross() performanceにある情報に基づいて、Nunpyは私が扱っている短い配列にはあまり適していない可能性があります。いくつかの部分が1秒に何回も実行されるので、スクリプトは減速します。そこには、効率的で読みやすいものがありますか?読みやすさと効率性どちらが良いですか?ナンシー、タプルなど?

答えて

2

もっと読みやすいタプルをお探しの場合はをご覧ください。ポイントは、ドキュメントに示されている例です。

Point = namedtuple('Point', ['x', 'y']) 
>>> p = Point(11, y=22)  # instantiate with positional or keyword arguments 
>>> p[0] + p[1]    # indexable like the plain tuple (11, 22) 
33 
>>> x, y = p    # unpack like a regular tuple 
>>> x, y 
(11, 22) 
>>> p.x + p.y    # fields also accessible by name 
33 
>>> p      # readable __repr__ with a name=value style 
Point(x=11, y=22) 

効率に興味がある場合は、implementationをご確認ください。これは__slots__を使用し、execを使ってアセンブルされるため、通常のタプルと比べてオーバーヘッドが最小限に抑えられます。

あなたも、より多くのフットプリントを減らすために__repr___asdict_replace、および__getnewargs__などの可能性が不要な方法のいくつかを切り出すことができPythonでコーディングされていますので。

+0

これはタプル型のラッパーだと思いますか?どれくらいのオーバーヘッドが発生しますか? – Varriount

+0

私の編集を参照してください。基本的に、最小。 – agf

+0

スピードは?私はNamedtupleを読んで、ドキュメントとhttp://pysnippet.blogspot.com/2010/01/named-tuple.htmlを見て、コメントのセクションでは、Namedtupleを使用することは2-3倍速が遅くなります。申し訳ありませんが、私の特に重要なセクションの1つは、何回も何回も実行されていますが、私は多くの揺れの部屋、パフォーマンスが賢明ではありません。それ以外にも、これは素晴らしい解決策のように見えます。 – Varriount

関連する問題