2011-07-23 44 views
1

我需要創建N個元素的數組numpy的,但我想具有偏移NOFF訪問 陣列,即第一元件應該在NOFF和 不爲0。在C語言中,這是簡單的做一些簡單的指針算術,即 我malloc數組,然後定義一個指針並適當地移動它。numpy的數組訪問

此外,我不想分配N + Noff元素,但只有N個元素。

現在對於numpy的有浮現在腦海裏的許多方法:

(1)限定了包裝函數訪問陣列 (2)覆蓋[]操作 (3)等

但是,實現這一點的最快方法是什麼?

非常感謝! 馬克

回答

1

您已經將(1)和(2)作爲或多或少明智的方法給出。要測試這些類型的速度,請在ipython中嘗試使用timeit魔術功能。用法示例:

A = array(range(10)) 
Noff = 2 
wrapper_access = lambda i: A[i - Noff] 
print wrapper_access(2) #0 
print wrapper_access(11) #9 
print wrapper_access(1) #9 = A[-1] 
timeit wrapper_access(5) 

在我的機器我從timeit 10000000 loops, best of 3: 193 ns per loop

2

使用A[n-offset]。這將offset變成offset+len(A)變成0變成len(A)

+0

最簡單的解決方案。但要小心,訪問offset-1及其下方將環繞到數組的另一端。 – wim

2

我將大約經過__getitem__()方法壓倒一切的[]運營商非常謹慎輸出。雖然用你自己的代碼會很好,但我可以很容易想象,當數組傳遞給任意庫函數時,你可能會遇到問題。

例如,如果該函數明確地試圖獲得陣列中的所有值作爲A[0:-1],這將映射到A[offset:offset-1],這將是用於offset任何正或負的值的空數組。這可能有一點設計意義,但它說明了一般問題。

因此,我建議你創建自己使用的包裝功能(作爲一個成員函數可能是最方便的),但不__getitem__()淤泥周圍。