簡體   English   中英

在滑動窗口中應用 np.where

[英]Applying np.where in a sliding window

我有一個True / False值數組,我想將其用作另一個不同形狀數組的重復掩碼。

import numpy as np

mask = np.array([[ True, True],
                 [False, True]])

array = np.random.randint(10, size=(64, 64))

我想在滑動窗口中應用這個掩碼,類似於數組上的where函數。 目前,我使用np.kron簡單地重復掩碼以匹配數組的維度:

layout = np.ones((array.shape[0]//mask.shape[0], array.shape[1]//mask.shape[1]), dtype=bool)
mask = np.kron(layout, mask)
result = np.where(mask, array, 255) # example usage

是否有任何優雅的方法可以執行相同的操作,而無需將mask重復為與array相同的形狀? 我希望會有某種滑動窗口技術或卷積/相關性。

將廣播與重塑一起使用,這樣您就不需要為重復的mask額外的內存:

x, y = array.shape[0]// mask.shape[0], array.shape[1] // mask.shape[1]

result1 = np.where(mask[None, :, None], 
                  array.reshape(x, mask.shape[0], y, mask.shape[1]), 
                  255).reshape(array.shape)

您可以嘗試使用np.tile

np.where(np.tile(mask, (a//m for a,m in zip(array.shape, mask.shape))), array, 255)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM