我需要創建N個元素的數組numpy的,但我想具有偏移NOFF訪問 陣列,即第一元件應該在NOFF和 不爲0。在C語言中,這是簡單的做一些簡單的指針算術,即 我malloc數組,然後定義一個指針並適當地移動它。numpy的數組訪問
此外,我不想分配N + Noff元素,但只有N個元素。
現在對於numpy的有浮現在腦海裏的許多方法:
(1)限定了包裝函數訪問陣列 (2)覆蓋[]操作 (3)等
但是,實現這一點的最快方法是什麼?
非常感謝! 馬克
我需要創建N個元素的數組numpy的,但我想具有偏移NOFF訪問 陣列,即第一元件應該在NOFF和 不爲0。在C語言中,這是簡單的做一些簡單的指針算術,即 我malloc數組,然後定義一個指針並適當地移動它。numpy的數組訪問
此外,我不想分配N + Noff元素,但只有N個元素。
現在對於numpy的有浮現在腦海裏的許多方法:
(1)限定了包裝函數訪問陣列 (2)覆蓋[]操作 (3)等
但是,實現這一點的最快方法是什麼?
非常感謝! 馬克
您已經將(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
使用A[n-offset]
。這將offset
變成offset+len(A)
變成0
變成len(A)
。
我將大約經過__getitem__()
方法壓倒一切的[]
運營商非常謹慎輸出。雖然用你自己的代碼會很好,但我可以很容易想象,當數組傳遞給任意庫函數時,你可能會遇到問題。
例如,如果該函數明確地試圖獲得陣列中的所有值作爲A[0:-1]
,這將映射到A[offset:offset-1]
,這將是用於offset
任何正或負的值的空數組。這可能有一點設計意義,但它說明了一般問題。
因此,我建議你創建自己使用的包裝功能(作爲一個成員函數可能是最方便的),但不__getitem__()
淤泥周圍。
最簡單的解決方案。但要小心,訪問offset-1及其下方將環繞到數組的另一端。 – wim