如何用Python向量化高效计算成对Dirac delta核矩阵?
高效实现Dirac Delta核的0-1矩阵(Numpy向量化方案)
完全可以用Numpy的向量化操作高效实现这个需求,性能远超Python循环遍历的方式。
实现代码
import numpy as np def delta_kernel(X, Y): """ X : ndarray of shape (n_samples_x, n_features_x) Y : ndarray of shape (n_samples_y, n_features_y) Returns kernel_arr : ndarray of shape (n_samples_x, n_samples_y) """ # 验证特征维度一致性 if X.shape[1] != Y.shape[1]: raise ValueError("X和Y的特征维度必须相同") # 利用广播机制实现逐样本对的全特征比较 # 扩展维度后,X变为(n_samples_x, 1, n_features),Y变为(1, n_samples_y, n_features) # 逐元素比较后,沿特征轴判断所有元素是否相等 matches = (X[:, np.newaxis, :] == Y[np.newaxis, :, :]).all(axis=2) # 转换为int类型的0-1矩阵 return matches.astype(int)
核心原理
- 广播机制:通过
np.newaxis给X和Y增加维度,让它们在样本维度上自动完成成对运算,避免显式循环。 - 向量化比较:
==操作由Numpy底层C实现,逐元素比较的效率远高于Python原生循环。 - 全特征匹配判断:
all(axis=2)沿特征维度判断该样本对的所有特征是否完全相等,直接得到布尔型匹配矩阵,最后转成int类型得到0-1结果。
测试示例
X = np.array([[1,2], [3,4], [5,6]]) Y = np.array([[3,4], [1,2], [7,8]]) print(delta_kernel(X, Y))
输出结果:
[[0 1 0] [1 0 0] [0 0 0]]
内容的提问来源于stack exchange,提问作者ajl123
相关产品推荐
相关产品推荐

