行列の行列の作り方
行列の行列、ベクトルの行列を作る 4 つの方法を比較する。kyewords: matlab, meshgrid, repmat, matrix of matrices, matrix of vectors, comparison
Contents
要素アクセス
clear; Y = 40; X = 30; A = rand(Y, X); YY = 30; XX = 40; tic; for yy=1:YY for xx=1:XX for y = 1:Y for x = 1:X B((yy-1) * Y + y, (xx-1) * X + x) = A(y, x); end end end end T1=toc
T1 = 4.2194
ones
clear; Y = 40; X = 30; A = rand(Y, X); YY = 30; XX = 40; tic; x=(1:X)'; xx=x(:, ones(1, XX)); y=(1:Y)'; yy=y(:, ones(1, YY)); B=A(yy, xx); T2=toc
T2 = 0.0021
repmat
clear; Y = 40; X = 30; A = rand(Y, X); YY = 30; XX = 40; tic; x=(1:X)'; xx=repmat(x, 1, XX); y=(1:Y)'; yy=repmat(y, 1, YY); B=A(yy, xx); T3=toc
T3 = 0.0017
meshgrid
ほかと異なり、B は正方行列に限られる。clear; Y = 40; X = 30; A = rand(Y, X); YY = 30; XX = 40; tic; x=(1:X)'; y=(1:Y)'; [xx, yy] = meshgrid(x, y); B=A(yy, xx); T4=toc
T4 = 0.0018