Numpy 如何矢量化以下python代码
我试图得到一个矩阵,其中每个元素的计算如下:Numpy 如何矢量化以下python代码,numpy,matrix,vectorization,matrix-multiplication,pytorch,Numpy,Matrix,Vectorization,Matrix Multiplication,Pytorch,我试图得到一个矩阵,其中每个元素的计算如下: X = torch.ones(batch_size, dim) X_ = torch.ones(batch_size, dim) Y = torch.ones(batch_size, dim) M = torch.zeros(batch_size, batch_size) for i in range(batch_size): for j in range(batch_size): M[i, j] = ((X[i] - X_[
X = torch.ones(batch_size, dim)
X_ = torch.ones(batch_size, dim)
Y = torch.ones(batch_size, dim)
M = torch.zeros(batch_size, batch_size)
for i in range(batch_size):
for j in range(batch_size):
M[i, j] = ((X[i] - X_[i] * Y[j])**2).sum()
按元素计算M
非常慢,关于如何使用矩阵乘法来代替for循环,有什么建议吗
谢谢。如果您想sum()
通过dim,您可以将2D问题“提升”到3D并在那里求和:
M = ((X[:, None, :] - X_[:, None, :] * Y[None, ...])**2).sum(dim=2)
它的工作原理:
X[:,无,:]
和X[:,无,:]
是三维尺寸的(批量大小,1,尺寸)
,而Y[无,…]
是三维尺寸的(1,批量大小,尺寸)
将大小为1的尺寸乘以相应的尺寸,得到大小为(批量大小,批量大小,dim)的结果。
最后,只对最后一个维度
(dim=2)
执行sum()
,以获得大小(批次大小,批次大小)
的输出M
这里的诀窍是利用。谢谢!因为M[i,j]是一个标量值感谢您对代码的解释,它完美地解决了我的问题。很抱歉造成混淆。我在这里传输代码时犯了一个错误。实际上X是一批向量,所以它的大小(batch_size,dim)。因此,应用sum()将得到一个标量。所以我想我们需要另一个版本的矢量化?