如何在 numpy 或 pytorch 中向量化自定义算法?

2023-12-25

假设我有两个矩阵:

A: size k x m

B: size m x n

使用自定义操作,我的输出将是k x n.

此自定义操作不是行之间的点积A和列B. Suppose该自定义操作定义为:

对于第 I 行A和第 J 列B, the i,j输出的元素是:

sum( (a[i] + b[j]) ^20 ), i loop over I, j loops over J

我认为实现这一点的唯一方法是扩展这个方程,计算每一项,然后将它们相加。

numpy 或 pytorch 有没有办法在不扩展方程的情况下做到这一点?


除了评论中@hpaulj 概述的方法之外,您还可以使用以下事实:您计算的本质上是成对的 Minkowski 距离:

import numpy as np
from scipy.spatial.distance import cdist

k,m,n = 10,20,30
A = np.random.random((k,m))
B = np.random.random((m,n))

method1 = ((A[...,None]+B)**20).sum(axis=1)
method2 = cdist(A,-B.T,'m',p=20)**20

np.allclose(method1,method2)
# True
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 numpy 或 pytorch 中向量化自定义算法? 的相关文章

随机推荐