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

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

屏蔽 Numpy 數(shù)組并在不使用 for 循環(huán)的情況下對每個掩碼應(yīng)用計算

屏蔽 Numpy 數(shù)組并在不使用 for 循環(huán)的情況下對每個掩碼應(yīng)用計算

哈士奇WWW 2021-11-09 19:55:54
假設(shè)我們有以下數(shù)據(jù)數(shù)組:data_array = np.array([[1, 1, 1], [1, 1, 2], [2, 2, 2], [3, 3, 3], [4, 4, 4]], np.int16)data_arrayarray([[1, 1, 1],       [1, 1, 2],       [2, 2, 2],       [3, 3, 3],       [4, 4, 4]])我們希望根據(jù)以下范圍屏蔽數(shù)組,以便能夠?qū)ζ帘尾糠謶?yīng)用計算:intervals = [[1, 2], [2, 3], [3, 4]]我們首先基于數(shù)據(jù)數(shù)組創(chuàng)建一個空數(shù)組和掩碼,以便我們可以組合每個掩碼數(shù)組的結(jié)果:init = np.zeros((data_array.shape[0], data_array.shape[1]))result_array = np.ma.masked_where((init == 0), init)result_arraymasked_array(data=[[--, --, --],      [--, --, --],      [--, --, --],      [--, --, --],      [--, --, --]],mask=[[ True,  True,  True],      [ True,  True,  True],      [ True,  True,  True],      [ True,  True,  True],      [ True,  True,  True]]有了這個,我們可以啟動一個 for 循環(huán),根據(jù)區(qū)間范圍屏蔽數(shù)組,對屏蔽數(shù)組執(zhí)行計算并將結(jié)果組合到單個結(jié)果數(shù)組中:for inter in intervals:    # Extact the start and en values for interval range    start_inter = inter[0]    end_inter = inter[1]    # Mask the array based on interval range    mask_init = np.ma.masked_where((data_array > end_inter), data_array)    masked_array = np.ma.masked_where((mask_init < start_inter), mask_init)    # Perform a dummy calculation on masked array    outcome = (masked_array + end_inter) * 100    # Combine the outcome arrays    result_array[result_array.mask] = outcome[result_array.mask]結(jié)果如下:array([[300.0, 300.0, 300.0],      [300.0, 300.0, 400.0],      [400.0, 400.0, 400.0],      [600.0, 600.0, 600.0],      [800.0, 800.0, 800.0]])我的問題是,如何在不使用 for 循環(huán)的情況下實現(xiàn)相同的結(jié)果?因此,在單個操作中對整個 data_array 應(yīng)用屏蔽和計算。請注意,計算的變量隨每個掩碼而變化。是否可以對這個問題應(yīng)用矢量化方法?我想numpy_indexed可能會有所幫助。謝謝你。
查看完整描述

1 回答

?
小唯快跑啊

TA貢獻(xiàn)1863條經(jīng)驗 獲得超2個贊

如果可以使間隔不重疊,那么您可以使用這樣的函數(shù):


import numpy as np


def func(data_array, intervals):

    data_array = np.asarray(data_array)

    start, end = np.asarray(intervals).T

    data_array_exp = data_array[..., np.newaxis]

    mask = (data_array_exp >= start) & (data_array_exp <= end)

    return np.sum((data_array_exp + end) * mask * 100, axis=-1)

在這種情況下,結(jié)果應(yīng)該與原始代碼相同:


import numpy as np


def func_orig(data_array, intervals):

    init = np.zeros((data_array.shape[0], data_array.shape[1]))

    result_array = np.ma.masked_where((init == 0), init)

    for inter in intervals:

        start_inter = inter[0]

        end_inter = inter[1]

        mask_init = np.ma.masked_where((data_array > end_inter), data_array)

        masked_array = np.ma.masked_where((mask_init < start_inter), mask_init)

        outcome = (masked_array + end_inter) * 100

        result_array[result_array.mask] = outcome[result_array.mask]

    return result_array.data


data_array = np.array([[1, 1, 1], [1, 1, 2], [2, 2, 2], [3, 3, 3], [4, 4, 4]], np.int16)

intervals = [[1, 1.9], [2, 2.9], [3, 4]]

print(np.allclose(func(data_array, intervals), func_orig(data_array, intervals)))

# True


查看完整回答
反對 回復(fù) 2021-11-09
  • 1 回答
  • 0 關(guān)注
  • 145 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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