我有两个矩阵A和B,我想计算最小加乘积,如下所示:Min-plus matrix multiplication。为此,我实现了以下代码:
def min_plus_product(A,B):
B = np.transpose(B)
Y = np.zeros((len(B),len(A)))
for i in range(len(B)):
Y[i] = (A + B[i]).min(1)
return np.transpose(Y)
这个方法很好用,但是对于大矩阵来说速度很慢,有没有办法让它更快?我听说用C实现或者使用GPU可能是不错的选择。
3条答案
按热度按时间ddrv8njm1#
如果中间维足够大,并且元素均匀分布,那么下面的算法可以节省一点,它利用了最小和通常来自两个小项的事实。
输出示例:
y0u0uwnf2#
一种可能的简单方法是使用numba。
1000x1000 A、B矩阵上的时序为:
1圈,3局两胜:原始代码的每个循环4.28 s
1圈,3局两胜:数字代码每循环2.32 s
crcmnpdw3#
下面是一个简洁而完全 numpy 解决方案,没有任何基于Python的循环: