【发布时间】:2025-12-13 13:20:39
【问题描述】:
我有两个向量 v 和 w,我想用它们制作一个矩阵 m,这样:
m[i, j] = v[i] * w[j]
换句话说,我想计算它们的外积。我可以通过使用theano.tensor.outer 或向v 和v 添加新索引并使用dot 产品来做到这一点。
m = T.dot(v[:,numpy.newaxis], w[numpy.newaxis,:])
现在,我尝试解决一个更普遍的问题。而不是两个向量v 和w 我有两个矩阵(我再次称它们为v 和w),我想从矩阵v 与对应的行计算每一行的外积矩阵w(第一个矩阵的第i行应该乘以第二个矩阵的第i行)。所以,我想做这样的事情:
m1 = T.tensordot(v[:,:, numpy.newaxis], w[:,:,numpy.newaxis], axes = [[2],[2]])
m[i, j, k] = m1[i, k, j, k]
换句话说,m[:,:,k] 是矩阵v 和矩阵w 的行k_th 的k_th 行的外积对应的矩阵。
我发现上述“解决方案”存在两个问题。首先,它不是真正的解决方案,因为代码的第二行不是正确的 theano 代码。所以,我的第一个问题是如何通过强制某些索引相等来执行此“高级切片”。例如m[i, k] = a[i, k, i, i, k]。其次,我不喜欢我首先从两个 2D 张量创建 4D 张量 (m1),然后将其还原为 3D 张量。它可能非常消耗内存。我想可以避免它。
【问题讨论】:
标签: python numpy matrix theano