我有三维张量("tensor3"
——矩阵数组),我想计算每个矩阵的行列式(theano.sandbox.linalg.det
)。有没有一种方法可以在不使用theano.scan
的情况下计算每个行列式?当我尝试直接在张量上调用det
时,我会得到错误
3-dimensional array given. Array must be two-dimensional.
但我读到scan
很慢,不能很好地并行化,如果可能的话,应该只使用张量运算。是这样吗?在这种情况下,我可以避免使用扫描吗?
我看到了三种可能性:
- 如果在编译Theano函数之前知道tensor3变量中的矩阵数,则可以对tensor3中的所有矩阵使用split()op或仅调用det()
- 如果你不知道形状,你可以制作自己的op,它将在输入上循环并调用numpy-fct。有关如何制作操作的示例,请参阅
- 使用扫描。在这种情况下使用它很容易。请参阅此示例,只需将调用从tensordot更改为det()