亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

將方波函數應用于 numpy 數組

將方波函數應用于 numpy 數組

滄海一幻覺 2023-09-12 15:06:44
我可以快速將 cos 函數應用到 float32 numpy 數組: cos_f = np.vectorize(lambda x: math.cos(2 * math.pi * x))  signal = square_f(integral)但是,如果我嘗試這樣做: square_f = np.vectorize(lambda x: sig.square(2 * math.pi * x))  signal = square_f(integral)60,000 個樣本需要 15 秒。integral長度為1024,用作緩沖區。我應該如何將方波應用于我的信號?
查看完整描述

2 回答

?
德瑪西亞99

TA貢獻1770條經驗 獲得超3個贊

我不確定你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)

當然,您也可以創建一個函數,然后使用數組作為輸入來調用它:


def cos2pi(x):

    return np.cos(2*np.pi * x)


signal1 = cos2pi(integral)

我們還可以更進一步,對所有樣本同時調用該函數一次。


samples = np.random.random((60000, 1024))

signal1 = cos2pi(samples)


查看完整回答
反對 回復 2023-09-12
?
翻翻過去那場雪

TA貢獻2065條經驗 獲得超14個贊

sig.square(2*np.pi * x)比 慢三倍np.cos(2*np.pi * x),但是,這不是瓶頸。這種np.vectorize基于漂亮的裝飾實際上會導致 120 倍的減速!發生這種情況的原因是它square_f適用scipy.signal.square于正在迭代的項目,這是一組旨在與數組一起使用的算術(與 不同math.cos)。這是內部完成的算術示例scipy.signal.square:


def example(x, w=0.5):

    return (1 - (w > 1) | (w < 0)) & (np.mod(x, 2 * pi) < w * 2 * np.pi)

假設arr是一個大數組,這顯然example(arr)比調用更高效


ex = np.vectorize(lambda x: example(x))

ex(arr)

時間安排也表明:


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)


查看完整回答
反對 回復 2023-09-12
  • 2 回答
  • 0 關注
  • 126 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號