目錄
向量點積
矩陣乘法
矩陣轉置
向量轉換相機坐標系
在 Python 的科學計算庫(如 NumPy)中,einsum 是一個強大的函數,它可以簡潔地表示各種張量運算。下面是幾個不同類型的使用示例:
向量點積
向量點積是兩個向量對應元素相乘后求和的結果。使用 einsum 可以非常簡潔地實現。
?
import numpy as np# 創建兩個向量
a = np.array([1, 2, 3])
b = np.array([4, 5, 6])# 使用 einsum 計算向量點積
dot_product = np.einsum('i,i->', a, b)
print("向量點積結果:", dot_product)
矩陣乘法
矩陣乘法是將一個矩陣的行與另一個矩陣的列進行點積運算。
?
import numpy as np# 創建兩個矩陣
A = np.array([[1, 2], [3, 4]])
B = np.array([[5, 6], [7, 8]])# 使用 einsum 計算矩陣乘法
matrix_product = np.einsum('ij,jk->ik', A, B)
print("矩陣乘法結果:\n", matrix_product)
矩陣轉置
矩陣轉置是將矩陣的行和列進行交換。
?
import numpy as np# 創建一個矩陣
M = np.array([[1, 2, 3], [4, 5, 6]])# 使用 einsum 進行矩陣轉置
transposed_matrix = np.einsum('ij->ji', M)
print("矩陣轉置結果:\n", transposed_matrix)
這些示例展示了 einsum 在不同張量運算中的應用。它的優勢在于能夠用簡潔的字符串表示復雜的運算,避免了使用顯式的循環來實現這些運算,提高了代碼的可讀性和執行效率。
向量轉換相機坐標系
torch.einsum('c,bCc->bC', world_up_vector, extrinsic_matrix[..., :3, :3])
等效代碼:
new_world_up = torch.matmul(world_up_vector.unsqueeze(0), extrinsic_matrix[..., :3, :3]) # 形狀 (B, 1, 3)
new_world_up = new_world_up.squeeze(1) # 形狀 (B, 3)