日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

python求零点_python – 计算大序列的过零点的结果不同

發(fā)布時間:2024/7/19 python 65 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python求零点_python – 计算大序列的过零点的结果不同 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

這個問題源于查看

this關(guān)于計算

zero crossings數(shù)量的問題的答案.提供了幾個解決問題的答案,但NumPy

appproach在時間上摧毀了其他問題.

問題:為什么NumPy解決方案提供的結(jié)果與其他三種解決方案不同? (哪個是正確的?)

以下是計算過零次數(shù)的結(jié)果:

Blazing fast NumPy solution

total time: 0.303605794907 sec

Zero Crossings Small: 8

Zero Crossings Med: 54464

Zero Crossings Big: 5449071

Loop solution

total time: 15.6818780899 sec

Zero Crossings Small: 8

Zero Crossings Med: 44960

Zero Crossings Big: 4496847

Simple generator expression solution

total time: 16.3374049664 sec

Zero Crossings Small: 8

Zero Crossings Med: 44960

Zero Crossings Big: 4496847

Modified generator expression solution

total time: 13.6596589088 sec

Zero Crossings Small: 8

Zero Crossings Med: 44960

Zero Crossings Big: 4496847

用于獲得結(jié)果的代碼:

import time

import numpy as np

def zero_crossings_loop(sequence):

s = 0

for ind, _ in enumerate(sequence):

if ind+1 < len(sequence):

if sequence[ind]*sequence[ind+1] < 0:

s += 1

return s

def print_three_results(r1, r2, r3):

print 'Zero Crossings Small:', r1

print 'Zero Crossings Med:', r2

print 'Zero Crossings Big:', r3

print '\n'

small = [80.6, 120.8, -115.6, -76.1, 131.3, 105.1, 138.4, -81.3, -95.3, 89.2, -154.1, 121.4, -85.1, 96.8, 68.2]

med = np.random.randint(-10, 10, size=100000)

big = np.random.randint(-10, 10, size=10000000)

print 'Blazing fast NumPy solution'

tic = time.time()

z1 = (np.diff(np.sign(small)) != 0).sum()

z2 = (np.diff(np.sign(med)) != 0).sum()

z3 = (np.diff(np.sign(big)) != 0).sum()

print 'total time: {0} sec'.format(time.time()-tic)

print_three_results(z1, z2, z3)

print 'Loop solution'

tic = time.time()

z1 = zero_crossings_loop(small)

z2 = zero_crossings_loop(med)

z3 = zero_crossings_loop(big)

print 'total time: {0} sec'.format(time.time()-tic)

print_three_results(z1, z2, z3)

print 'Simple generator expression solution'

tic = time.time()

z1 = sum(1 for i, _ in enumerate(small) if (i+1 < len(small)) if small[i]*small[i+1] < 0)

z2 = sum(1 for i, _ in enumerate(med) if (i+1 < len(med)) if med[i]*med[i+1] < 0)

z3 = sum(1 for i, _ in enumerate(big) if (i+1 < len(big)) if big[i]*big[i+1] < 0)

print 'total time: {0} sec'.format(time.time()-tic)

print_three_results(z1, z2, z3)

print 'Modified generator expression solution'

tic = time.time()

z1 = sum(1 for i in xrange(1, len(small)) if small[i-1]*small[i] < 0)

z2 = sum(1 for i in xrange(1, len(med)) if med[i-1]*med[i] < 0)

z3 = sum(1 for i in xrange(1, len(big)) if big[i-1]*big[i] < 0)

print 'total time: {0} sec'.format(time.time()-tic)

print_three_results(z1, z2, z3)

總結(jié)

以上是生活随笔為你收集整理的python求零点_python – 计算大序列的过零点的结果不同的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。