我需要创建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