假设一维numpy数组。我想创建一个包含每个 n 元素的新数组。什么是计算速度最快的方法?
示例:
a = numpy.arange(1,10)
b = numpy.fancytricks(a,?)
# b is now [2,4,6,8] if n = 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 ... 是设置/更改。部署后,访问速度与更新前存储的值相同。