2011-07-23 45 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__()淤泥周围。