2011-08-06 36 views
1

我在我的程序中使用xyz向量很多。我使用它們足夠讓每個變量(如offset_x,offset_y等)變得單調乏味和雜亂無章。現在,我可以將每個x,y和一組集合(例如offset =(x,y,z)),但是我發現在任何地方使用offset [0]這樣的東西都會使代碼不夠可讀如我所願,使用字典似乎效率太低。 Numpy是另一種選擇,很多人都提出過這個建議,但根據Poor numpy.cross() performance的信息,Nunpy可能不太適合我正在處理的短陣列,而且我沒有太多的空白腳本變慢,因爲一些片段每秒運行幾次。那裏有什麼東西既有效又可讀?可讀性和效率,哪個更好? Numpy,tuple等?

回答

2

如果您正在尋找更具可讀性的元組,請查看namedtuple。要點是文檔中給出的示例。

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進行彙編,所以它應該比常規元組開銷少。

,因爲它是在Python編寫的,你可以切出一些的可能是不必要的方法,如__repr___asdict_replace,並且__getnewargs__甚至更​​減少佔地面積。

+0

我猜這是一個元組類型的包裝?它會產生多少開銷? – Varriount

+0

看我的編輯。基本上,最小。 – agf

+0

至於速度?我閱讀了Namedtuple,查看了這兩個文檔以及http://pysnippet.blogspot.com/2010/01/named-tuple.html,並在評論部分中,一個人聲明使用Namedtuple爲2-3倍慢。抱歉燒烤你,但我的一個特別重要的部分每秒運行幾次,我沒有太多的擺動空間,性能明智。除此之外,這看起來像是一個很好的解決方案 – Varriount