我有一個RGB影像的比例作為numpy陣列,其形狀為(高度,寬度,通道)=(5,5,3)。
我想要做的是得到與5x5的kernel矩陣的元素相乘之和,逐個通道。所以它應該產生一個大小為3的向量。
我目前的解決方案是:
print(partion.shape) # (5, 5, 3)
print(kernel.shape) # (5, 5)
result = [(kernel * portion[:, :, channel]).sum() for channel in range(3)]
print(result.shape) # (3,)
我怎樣才能以一種更有效的方式實作同樣的結果,希望不用for-loop?
uj5u.com熱心網友回復:
我將在這里展示兩種方法。第一種基本上是 "手動 "版本,它依賴于廣播,這是使用numpy和類似庫時需要理解的一個重要概念。
第二種方法基本上是使用愛因斯坦求和慣例,如果使用得當,它可以相當快。
import numpy as np
portion = np.zeros((5, 5, 3)
kernel = np.zeros((5, 5)
# 替代方案sum(kernel[..., None] * portion, axis=(0,1))
print(result.shape)
# einsum方法:
result = np.einsum('ij,ijk->k', kernel, portion)
print(result.shape)
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/309455.html
標籤:
