第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

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

沒有循環(huán)的python中的均值過濾器

沒有循環(huán)的python中的均值過濾器

紅糖糍粑 2022-10-05 17:01:39
我被要求在具有給定內(nèi)核的一維數(shù)組上創(chuàng)建一個 mean_filter 函數(shù),假設填充為零。均值濾波器是一種旨在去除噪聲的算法。它需要一個數(shù)組,一個內(nèi)核(比如 K),并用周圍 K 值的平均值替換數(shù)組的每個值,包括本身在內(nèi)。該算法用于圖像處理。我能夠做到這一點-def mean_filter(arr, k):    # applies mean filter to 1-d array with the kernel size 2k+1 . Write your code here    p=len(arr)    arr2=np.zeros(2*k+p, dtype=float)    arr3=np.zeros(2*k+p, dtype=float)    arr4=np.zeros(p, dtype=float)    for i in range(p):        arr2[k+i]=arr[i]    for i in range(k,k+p):        sum=0        for j in range(-k,k+1):            sum+=arr2[i+j]        arr3[i]=sum/float(2*k+1)    for i in range(p):        arr4[i]=arr3[k+i]    return arr4但是他們對我的期望是在沒有任何循環(huán)的情況下做到這一點。指令顯示-“這個任務應該在沒有任何類型的循環(huán)、理解或函數(shù)(如 np.vectorize 等)的情況下完成。不要為此任務使用內(nèi)置卷積函數(shù)“我真的不知道如何做到這一點。你能建議點什么嗎?線索將不勝感激。
查看完整描述

3 回答

?
拉風的咖菲貓

TA貢獻1995條經(jīng)驗 獲得超2個贊

舉例:


import numpy as np

k=2

kern=np.ones(2*k+1)/(2*k+1)

arr=np.random.random((10))

out=np.convolve(arr,kern, mode='same')


查看完整回答
反對 回復 2022-10-05
?
慕無忌1623718

TA貢獻1744條經(jīng)驗 獲得超4個贊

我找到了一個解決方案,該解決方案的靈感來自我在嘗試實現(xiàn)不同的邊緣行為時偶然發(fā)現(xiàn)的 matlab 函數(shù),而在均值過濾中沒有填充:https ://www.mathworks.com/matlabcentral/fileexchange/23287-smooth2a 。它適用于矩陣乘法,不涉及循環(huán)或卷積。使用一維數(shù)組,它會給出這樣的結(jié)果:


import scipy.sparse

import numpy as np


def mean_filter(arr, k):

    p = len(arr)

    diag_offset = np.linspace(-(k//2), k//2, k, dtype=int)

    eL = scipy.sparse.diags(np.ones((k, p)), offsets=diag_offset, shape=(p, p))

    nrmlize = eL @ np.ones_like(arr)

    return (eL @ arr) / nrmlize

它的工作原理是創(chuàng)建一個對角線與內(nèi)核大小一樣多的矩陣,然后對數(shù)組進行點積。結(jié)果是一個數(shù)組,其中每個元素都是內(nèi)核上原始數(shù)組元素的總和?;旧?,這相當于卷積。最后,您通過內(nèi)核大小對該總和進行歸一化。


需要注意的一點是,在您無法構(gòu)建完整內(nèi)核的陣列邊緣,使用了適合您的陣列的盡可能多的內(nèi)核(這就是為什么您不能在之后僅通過標量進行歸一化)。


該解決方案還可以擴展到處理多維數(shù)組。


查看完整回答
反對 回復 2022-10-05
?
慕神8447489

TA貢獻1780條經(jīng)驗 獲得超1個贊

def meanfilt (x, k):

    """Apply a length-k mean filter to a 1D array x.

    Boundaries are extended by repeating endpoints.

    """

    

    import numpy as np


    assert k % 2 == 1, "Mean filter length must be odd."

    assert x.ndim == 1, "Input must be one-dimensional."

    

    k2 = (k - 1) // 2

    y = np.zeros ((len (x), k), dtype=x.dtype)

    y[:,k2] = x

    for i in range (k2):

        j = k2 - i

        y[j:,i] = x[:-j]

        y[:j,i] = x[0]

        y[:-j,-(i+1)] = x[j:]

        y[-j:,-(i+1)] = x[-1]

    return np.mean (y, axis=1)

注意:答案是從回購中挑選的


查看完整回答
反對 回復 2022-10-05
  • 3 回答
  • 0 關(guān)注
  • 122 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號