我需要创建一个三维数组,将矩阵的所有元素提升到矢量给出的不同幂。有没有办法避免电源循环?
例如,如果A是标量,我可以做
A = 2;
b = 1:10;
C = A.^b;
如果A是矢量,我可以
A = [1, 2, 3];
b = 1:10;
C = bsxfun(@power, A, (0:5)');
如果A是矩阵,我该怎么办?
答案 0 :(得分:3)
再次使用bsxfun
,但在第三维中安排指数(b
):
A = [1, 2 3; 4 5 6];
b = 1:10;
C = bsxfun(@power, A, permute(b(:), [2 3 1]));
这样可以得到一个3D数组(在这种情况下为2x3x10)。
如果指数是连续值,则以下代码可能更快:
n = 10; %// compute powers with exponents 1, 2, ..., n
C = cumprod(repmat(A, [1 1 n]) ,3);
答案 1 :(得分:2)
试试这个,
% m & n being the dimensions of matrix A
A = randi(9,[m n]);
P = cat(3,1*ones(m,n),2*ones(m,n),3*ones(m,n));
C = bsxfun(@power, A, P);