从numpy数组

时间:2015-11-14 21:52:08

标签: python arrays numpy

假设一维numpy数组。我想创建一个包含每个 n 元素的新数组。什么是计算速度最快的方法?

示例:

a = numpy.arange(1,10)
b = numpy.fancytricks(a,?)
# b is now [2,4,6,8] if n = 2. 

编辑:加粗问题的重要部分。

2 个答案:

答案 0 :(得分:2)

执行此操作的绝对最快方法是在纯C中编写扩展模块,并使用buffer protocol直接访问数据。如果您使用Cython或其他此类工具为您编写C,您可能会在自动引用计数中看到少量性能丢失。由于您仍然需要手写C进行手动引用计数,因此差异可能忽略不计。

这将比NumPy开箱即用的切片语法略微减少开销。但是,假设您正确使用NumPy,整体性能提升可能很小而且不变,因此我不清楚在任何合理的情况下这都值得付出额外的努力。

答案 1 :(得分:2)

Moo.js
b = a[1::step]

计算费用n = length(a) ,您正在“制作”O(n)

的循环
  

更新:
  计算成本length(a)/step,没有O(1)对象重新排列,只有一个常量 ...在access-method ... 是设置/更改。部署后,访问速度与更新前存储的值相同。