2 回答

TA貢獻(xiàn)1770條經(jīng)驗(yàn) 獲得超3個(gè)贊
我不確定你np.vectorize是否需要這里:
import numpy as np
from scipy import signal as sig
integral = np.linspace(0, 10, 1024)
signal1 = np.cos(2*np.pi * integral)
signal2 = sig.square(2*np.pi * integral)
當(dāng)然,您也可以創(chuàng)建一個(gè)函數(shù),然后使用數(shù)組作為輸入來調(diào)用它:
def cos2pi(x):
return np.cos(2*np.pi * x)
signal1 = cos2pi(integral)
我們還可以更進(jìn)一步,對(duì)所有樣本同時(shí)調(diào)用該函數(shù)一次。
samples = np.random.random((60000, 1024))
signal1 = cos2pi(samples)

TA貢獻(xiàn)2065條經(jīng)驗(yàn) 獲得超14個(gè)贊
sig.square(2*np.pi * x)比 慢三倍np.cos(2*np.pi * x),但是,這不是瓶頸。這種np.vectorize基于漂亮的裝飾實(shí)際上會(huì)導(dǎo)致 120 倍的減速!發(fā)生這種情況的原因是它square_f適用scipy.signal.square于正在迭代的項(xiàng)目,這是一組旨在與數(shù)組一起使用的算術(shù)(與 不同math.cos)。這是內(nèi)部完成的算術(shù)示例scipy.signal.square:
def example(x, w=0.5):
return (1 - (w > 1) | (w < 0)) & (np.mod(x, 2 * pi) < w * 2 * np.pi)
假設(shè)arr是一個(gè)大數(shù)組,這顯然example(arr)比調(diào)用更高效
ex = np.vectorize(lambda x: example(x))
ex(arr)
時(shí)間安排也表明:
arr = np.linspace(0,1,1000000)
%timeit ex(arr)
%timeit example(arr)
8.13 s ± 208 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
18.5 ms ± 1.14 ms per loop (mean ± std. dev. of 7 runs, 100 loops each)
添加回答
舉報(bào)