numpy数组访问

时间:2011-07-23 13:03:01

标签: python numpy

我需要创建N个元素的numpy数组,但我想访问 具有偏移Noff的数组,即第一个元素应该在Noff和 在C中,这对于一些简单的指针算法很简单,即 我malloc数组然后定义一个指针并适当地移动它。

此外,我不想分配N + Noff元素,只需要N个元素。

现在对于numpy来说,我想到了很多方法:

(1)定义一个包装函数来访问数组 (2)覆盖[]运算符 (3)等

但实现这一目标的最快方法是什么?

非常感谢! 标记

3 个答案:

答案 0 :(得分:2)

使用A[n-offset]。这会将offset变为offset+len(A)0len(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

获得输出