Я хочу сделать именно то, что сделал этот парень:
Python - изменения счетных знаков
Однако мне нужно оптимизировать его для быстрого запуска. Короче говоря, я хочу взять временный ряд и рассказывать каждый раз, когда он пересекает ноль (меняет знак). Я хочу записать время между пересечениями нуля. Так как это реальные данные (32-битный float), я сомневаюсь, что у каждого будет число, равное нулю, так что это не важно. В настоящее время у меня есть программа синхронизации, поэтому я приму ваши результаты, чтобы увидеть, кто победит.
Мое решение дает (микросекунды):
open data 8384
sign data 8123
zcd data 415466
Как видите, детектор с нулевым пересечением - это медленная часть. Вот мой код.
import numpy, datetime
class timer():
def __init__(self):
self.t0 = datetime.datetime.now()
self.t = datetime.datetime.now()
def __call__(self,text='unknown'):
print text,'\t',(datetime.datetime.now()-self.t).microseconds
self.t=datetime.datetime.now()
def zcd(data,t):
sign_array=numpy.sign(data)
t('sign data')
out=[]
current = sign_array[0]
count=0
for i in sign_array[1:]:
if i!=current:
out.append(count)
current=i
count=0
else: count+=1
t('zcd data')
return out
def main():
t = timer()
data = numpy.fromfile('deci.dat',dtype=numpy.float32)
t('open data')
zcd(data,t)
if __name__=='__main__':
main()