我需要创建N个元素的numpy数组,但我想访问 具有偏移Noff的数组,即第一个元素应该在Noff和 在C中,这对于一些简单的指针算法很简单,即 我malloc数组然后定义一个指针并适当地移动它。
此外,我不想分配N + Noff元素,只需要N个元素。
现在对于numpy来说,我想到了很多方法:
(1)定义一个包装函数来访问数组 (2)覆盖[]运算符 (3)等
但实现这一目标的最快方法是什么?
非常感谢! 标记
答案 0 :(得分:2)
使用A[n-offset]
。这会将offset
变为offset+len(A)
到0
到len(A)
。
答案 1 :(得分:2)
我会非常谨慎地通过[]
方法覆盖__getitem__()
运算符。虽然它可以很好地使用您自己的代码,但我可以很容易地想象当数组传递给任意库函数时,您可能会遇到问题。
例如,如果函数显式尝试将数组中的所有值都设为A[0:-1]
,那么它将映射到A[offset:offset-1]
,对于任何正值或负值offset
,它将是一个空数组。 1}}。这可能有点人为,但它说明了一般问题。
因此,我建议您创建一个自己使用的包装函数(因为成员函数可能是最方便的),但不要使用__getitem__()
。
答案 2 :(得分:1)
你已经将(1)和(2)作为更多或更不明智的方法。要测试这类事物的速度,请在timeit
中尝试ipython
魔法功能。用法示例:
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