让我们考虑一个numpy的阵列从长长的numpy数组中保留两个元素的最快方法?
a = array([1,2,25,13,10,9,4,5])
含有偶数个元件。 我需要随意到阵列的每两个的仅一个元件保持: 第一或第二个,则第三或第四等 例如,使用一个,它应导致成:
c = array([1,13,9,5])
d = array([2,13,10,4])
e = array([2,25,10,5])
我必须在长阵列的上百个元素和上千个巨大的循环阵列上做这件事。什么将是使用pair_index+random.randint(0,1)
,保持一个元素每隔三,四等,将是不错;-) 感谢
结果的通用方法在两个迭代元素和保存或删除一个最快的算法:
import timeit
import numpy
def soluce1():
k=2
a = numpy.array([1,2,25,13,10,9,4,5])
aa = a.reshape(-1, k)
i = numpy.random.randint(k, size = aa.shape[0])
return numpy.choose(i, aa.T)
def soluce2():
k=2
a = numpy.array([1,2,25,13,10,9,4,5])
w = len(a) // k
i = numpy.random.randint(0, 2, w) + numpy.arange(0, 2 * w, 2)
return a[i]
def random_skip():
a= numpy.array([1,2,25,13,10,9,4,5])
k=2
idx = numpy.arange(0, len(a), k)
idx += numpy.random.randint(k, size=len(idx))
idx = numpy.clip(idx, 0, len(a)-1)
return a[idx]
> ts1=timeit.timeit(stmt='soluce1()',setup='from __main__ import soluce1',number=10000)
> --> 161 µs
> ts2=timeit.timeit(stmt='soluce2()',setup='from __main__ import soluce2',number=10000)
> --> 159 µs
> ts3=timeit.timeit(stmt='random_skip()',setup='from __main__ import random_skip',number=10000)
> --> 166 µs
似乎是等效的建议。再次感谢所有。
http://stackoverflow.com/questions/1623849/fastest-way-to-zero-out-low-values-in-array – 2014-10-12 13:34:37