3 列の行列 A があるc1
とc2
しc3
ます。
1 2 9
3 0 7
3 1 4
c1
そして、最初の列が、2 番目の列がc1^2
、n 列がc1^n
、n+1 列がc2
、n+2 列がなどの次元 (3x3n) の新しい行列が必要ですc2^2
。MATLAB でこれを行う簡単な方法はありますか?
3 列の行列 A があるc1
とc2
しc3
ます。
1 2 9
3 0 7
3 1 4
c1
そして、最初の列が、2 番目の列がc1^2
、n 列がc1^n
、n+1 列がc2
、n+2 列がなどの次元 (3x3n) の新しい行列が必要ですc2^2
。MATLAB でこれを行う簡単な方法はありますか?
PERMUTE、BSXFUN、およびRESHAPEを組み合わせると、これを非常に簡単に実行して、任意のサイズのA
. わかりやすくするために手順を分けています。必要に応じて、それらを 1 行にまとめることができます。
n = 2;
A = [1 2 9; 3 0 7; 3 1 4];
[r,c] = size(A);
%# reshape A into a r-by-1-by-c array
A = permute(A,[1 3 2]);
%# create a r-by-n-by-c array with the powers
A = bsxfun(@power,A,1:n);
%# reshape such that we get a r-by-n*c array
A = reshape(A,r,[])
A =
1 1 2 4 9 81
3 9 0 0 7 49
3 9 1 1 4 16
以下を試してください(現在Matlabにアクセスできません)、うまくいくはずです
A = [1 2 9; 3 0 7; 3 1 4]; B = []; i=1:n の場合 B = [B A.^i]; 終わり B = [B(:,1:3:終了) B(:,2:3:終了) B(:,3:3:終了)];
よりメモリ効率の良いルーチン:
A = [1 2 9; 3 0 7; 3 1 4]; B = ゼロ (3,3*n); i=1:n の場合 B(3*(i-1)+1:3*(i-1)+3,:) = A.^i; 終わり B = [B(:,1:3:終了) B(:,2:3:終了) B(:,3:3:終了)];
ここに1つの解決策があります:
n = 4;
A = [1 2 9; 3 0 7; 3 1 4];
Soln = [repmat(A(:, 1), 1, n).^(repmat(1:n, 3, 1)), ...
repmat(A(:, 2), 1, n).^(repmat(1:n, 3, 1)), ...
repmat(A(:, 3), 1, n).^(repmat(1:n, 3, 1))];