我正在尋找一種使用 pytorch 或 numpy 在 MxNxR 張量/陣列中查找 2D 模式的方法。例如,查看布爾模式張量的字典(例如 {6x6 : freq})是否存在于更大的布爾張量(例如 3x256x256)中。
然后我想更新我的字典模式和頻率。
我希望有一種 pytorchi 的方式來做它,而不是在它上面回圈,或者有一個優化的回圈來做它。
據我所知,當我們有一個標量值時,torch.where 會起作用。如果我有一個 6x6 的張量而不是一個值,我不知道該怎么辦。我研究了Find Patterns in a Numpy Array,但我認為將其用于 2D 模式是不可行的。
uj5u.com熱心網友回復:
我在想也許你可以使用卷積來解決這個問題。假設您有一個由0和組成的輸入1。在這里,我們將舉一個帶有 u=input of3x3和2x2模式的最小示例:
>>> x = torch.tensor([[1., 0., 0.],
[0., 1., 0.],
[1., 0., 0.]])
模式將是:
>>> pattern = torch.tensor([[1., 0.],
[0., 1.]])
在這里可以在輸入的左上角找到模式。
我們使用nn.functional.conv2d與1 - pattern作為內核進行卷積。
>>> img, mask = x[None, None], pattern[None, None]
>>> M = F.conv2d(img, 1 - mask)
tensor([[[[0., 1.],
[2., 0.]]]])
當且僅當結果等于1模式中s的數量時才存在匹配:
>>> M == mask.sum(dim=(2,3)))
tensor([[[[ True, False],
[False, False]]]])
您可以從這個最終的布爾掩碼中推匯出頻率。您可以通過在卷積中添加內核來將此方法擴展到多種模式。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/350862.html
上一篇:numpywhere索引條件
