在Matlab中从提高矩阵到幂创建数组

Lai*_*ond 5 matlab vectorization

我需要创建一个3维数组,将矩阵的所有元素提升为矢量赋予的不同幂。有没有办法避免功率循环?

例如,如果A是标量,我可以

A = 2;
b = 1:10;
C = A.^b;
Run Code Online (Sandbox Code Playgroud)

如果A是向量,我可以

A = [1, 2, 3];
b = 1:10;
C = bsxfun(@power, A, (0:5)');
Run Code Online (Sandbox Code Playgroud)

如果A是矩阵怎么办?

Lui*_*ndo 3

再次使用bsxfun,但将指数 ( b) 排列在第三维中:

A = [1, 2 3; 4 5 6];
b = 1:10;
C = bsxfun(@power, A, permute(b(:), [2 3 1]));
Run Code Online (Sandbox Code Playgroud)

这将为您提供一个 3D 数组作为结果(在本例中为 2x3x10)。


如果指数是连续值,则以下代码可能会更快:

n = 10; %// compute powers with exponents 1, 2, ..., n
C = cumprod(repmat(A, [1 1 n]) ,3);
Run Code Online (Sandbox Code Playgroud)