numpy阵列访问

2024-10-03 13:19:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要创建一个由N个元素组成的numpy数组,但是我想访问 具有偏移Noff的数组,即第一个元素应位于Noff和 不是在0。在C语言中,用一些简单的指针算法,即。 我malloc数组,然后定义一个指针并适当地移动它。在

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

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

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

但实现这一点的最快方法是什么?在

非常感谢! 马克


Tags: 方法函数numpy算法元素定义运算符数组
3条回答

您已经给出了(1)和(2)作为或多或少合理的方法。要测试这类东西的速度,请尝试timeit中的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)

在我的机器上,我从timeit10000000 loops, best of 3: 193 ns per loop得到输出

对于在__getitem__()方法中过度使用[]运算符,我会非常谨慎。尽管使用自己的代码可以,但我可以很容易地想象,当数组被传递给任意库函数时,您可能会遇到问题。在

例如,如果函数显式地尝试以A[0:-1]的形式获取数组中的所有值,它将映射到A[offset:offset-1],这将是offset的任何正值或负值的空数组。这可能有点做作,但它说明了一个普遍的问题。在

因此,我建议您创建一个包装器函数供您自己使用(作为成员函数可能最方便),但不要胡乱使用__getitem__()。在

使用A[n-offset]。这将offset变成{}变成{}到{}。在

相关问题 更多 >