我有一個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?我希望會有某種滑動視窗技術或卷積/相關性。
uj5u.com熱心網友回復:
將廣播與 reshape 一起使用,這樣您就不需要額外的記憶體來重復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)
uj5u.com熱心網友回復:
你可以嘗試np.tile:
np.where(np.tile(mask, (a//m for a,m in zip(array.shape, mask.shape))), array, 255)
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/338382.html
