Matrix times array
バージョン 1.0.0 (3.2 KB) 作成者:
Matthias Kredler
Fast multiplication of multi-dimensional array x by matrix A along dim. n (or: mode-n product of tensor x and matrix A)
out = MatrixTimesArray(A,x,i);
Multiplication of multi-dimensional array x by matrix A along dimension i. This is equivalent to mode-i product of tensor x by matrix A in tensor language, see for example De Lathauwer et al. (SIAM 2000). No further mex-files needed.
Elements of output
are determined by the formula:
The function reshapes x into a matrix (performing a permute, if necessary) and then either pre- or post-multiplies it by A, whichever minimizes permute operations). If x is a matrix, the following equivalence holds to conventional matrix algebra:
A*x = MatrixTimesArray(A,x,1); % dim. 1: matrix pre-multiplication
x*B'= MatrixTimesArray(B,x,2); % dim. 2: matrix post-multiplication
As for speed: For large arrays, note that the permute operations cost time time, not the reshape. Thus, put most computationally intense dimensions on first (preferred) and last dimension.
Inputs:
A:
matrix, full or sparse.
x: k-dimensional array of size ![](data:image/png;base64,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)
i: Scalar, optional. Along which dimension to multiply. If omitted, the function multiplies along the first compatible dimension
Output:
Example:
A = rand(60,30); % Matrix A: 60-by-30.
x = rand(50,30,20); % Array/tensor x: (50,30,20)
y = MatrixTimesArray(A,x,2); % Multiply along dimension 2:
size(y) % y is (50,60,20) array.
yy= MatrixTimesArray(A,x); % Omitting last input (dim.) gives same result.
norm(yy(:)-y(:));
Version: 20-Dec-2021
Author: Matthias Kredler (Universidad Carlos III de Madrid), mkredler@eco.uc3m.es
Acknowledgement: This code follows the same idea as my function 'kronm.m', which carries out a series of MatrixTimesArray / n-mode products on a tensor.
引用
Matthias Kredler (2025). Matrix times array (https://www.mathworks.com/matlabcentral/fileexchange/103825-matrix-times-array), MATLAB Central File Exchange. に取得済み.
MATLAB リリースの互換性
作成:
R2021b
すべてのリリースと互換性あり
プラットフォームの互換性
Windows macOS Linuxタグ
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!バージョン | 公開済み | リリース ノート | |
---|---|---|---|
1.0.0 |