- paddle.linalg. multi_dot ( x, name=None ) [source]
Multi_dot is an operator that calculates multiple matrix multiplications.
Supports inputs of float16(only GPU support), float32 and float64 dtypes. This function does not support batched inputs.
The input tensor in [x] must be 2-D except for the first and last can be 1-D. If the first tensor is a 1-D vector of shape(n, ) it is treated as row vector of shape(1, n), similarly if the last tensor is a 1D vector of shape(n, ), it is treated as a column vector of shape(n, 1).
If the first and last tensor are 2-D matrix, then the output is also 2-D matrix, otherwise the output is a 1-D vector.
Multi_dot will select the lowest cost multiplication order for calculation. The cost of multiplying two matrices with shapes (a, b) and (b, c) is a * b * c. Given matrices A, B, C with shapes (20, 5), (5, 100), (100, 10) respectively, we can calculate the cost of different multiplication orders as follows: - Cost((AB)C) = 20x5x100 + 20x100x10 = 30000 - Cost(A(BC)) = 5x100x10 + 20x5x10 = 6000
In this case, multiplying B and C first, then multiply A, which is 5 times faster than sequential calculation.
x ([Tensor]) – The input tensors which is a list Tensor.
name (str|None) – A name for this layer(optional). If set None, the layer will be named automatically.
The output Tensor.
- Return type
import paddle # A * B A = paddle.rand([3, 4]) B = paddle.rand([4, 5]) out = paddle.linalg.multi_dot([A, B]) print(out.shape) # [3, 5] # A * B * C A = paddle.rand([10, 5]) B = paddle.rand([5, 8]) C = paddle.rand([8, 7]) out = paddle.linalg.multi_dot([A, B, C]) print(out.shape) # [10, 7]