讓我們考慮一個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