我有下面的代码,我想移植到Torch Matmul
rotMat = xmat @ ymat @ zmat我能知道这是否是正确的顺序:
rotMat = torch.matmul(xmat, torch.matmul(ymat, zmat))发布于 2020-02-05 17:57:19
根据python对运算符优先的文档,@操作符具有从左到右的结合性。
https://docs.python.org/3/reference/expressions.html#operator-precedence
同一框组中的
运算符从左到右(除从右到左的幂运算外)。
因此,等效的操作是
rotMat = torch.matmul(torch.matmul(xmat, ymat), zmat)尽管要记住,矩阵乘法是相联的(数学上的),所以如果你用另一种方式做,结果就不会有太大的差别。通常,您希望以导致计算步骤最少的方式进行关联。例如,使用朴素矩阵乘法算法,如果X为1x10,Y为10x100,Z为100x1000,则
(X @ Y) @ Z和
X @ (Y @ Z)约为1*10*100 + 1*100*1000 = 101,000乘法/加法运算的第一个与10*100*1000 + 1*10*1000 = 1,001,000运算的第二个。虽然它们有相同的结果(忽略舍入错误),第二个版本将大约慢10倍!
正如@szymonMaszkepy手电筒张量所指出的,它也支持@运算符,因此您仍然可以使用
xmat @ ymat @ zmat在火把里。
https://stackoverflow.com/questions/60080997
复制相似问题