2024-10-03 13:19:26 发布
网友
我需要创建一个由N个元素组成的numpy数组,但是我想访问 具有偏移Noff的数组,即第一个元素应位于Noff和 不是在0。在C语言中,用一些简单的指针算法,即。 我malloc数组,然后定义一个指针并适当地移动它。在
此外,我不想分配N+Noff元素,而只分配N个元素。在
现在对于numpy,我想到了很多方法:
(1)定义一个包装函数来访问数组 (2) 重写[]运算符 (3) 等等
但实现这一点的最快方法是什么?在
非常感谢! 马克
您已经给出了(1)和(2)作为或多或少合理的方法。要测试这类东西的速度,请尝试timeit中的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得到输出
10000000 loops, best of 3: 193 ns per loop
对于在__getitem__()方法中过度使用[]运算符,我会非常谨慎。尽管使用自己的代码可以,但我可以很容易地想象,当数组被传递给任意库函数时,您可能会遇到问题。在
__getitem__()
[]
例如,如果函数显式地尝试以A[0:-1]的形式获取数组中的所有值,它将映射到A[offset:offset-1],这将是offset的任何正值或负值的空数组。这可能有点做作,但它说明了一个普遍的问题。在
A[0:-1]
A[offset:offset-1]
offset
因此,我建议您创建一个包装器函数供您自己使用(作为成员函数可能最方便),但不要胡乱使用__getitem__()。在
使用A[n-offset]。这将offset变成{}变成{}到{}。在
A[n-offset]
您已经给出了(1)和(2)作为或多或少合理的方法。要测试这类东西的速度,请尝试
timeit
中的timeit
魔法函数。用法示例:在我的机器上,我从timeit
10000000 loops, best of 3: 193 ns per loop
得到输出对于在
__getitem__()
方法中过度使用[]
运算符,我会非常谨慎。尽管使用自己的代码可以,但我可以很容易地想象,当数组被传递给任意库函数时,您可能会遇到问题。在例如,如果函数显式地尝试以
A[0:-1]
的形式获取数组中的所有值,它将映射到A[offset:offset-1]
,这将是offset
的任何正值或负值的空数组。这可能有点做作,但它说明了一个普遍的问题。在因此,我建议您创建一个包装器函数供您自己使用(作为成员函数可能最方便),但不要胡乱使用
__getitem__()
。在使用}变成{}到{}。在
A[n-offset]
。这将offset
变成{相关问题 更多 >
编程相关推荐