2014/12/31

matlab 行列の行列の作り方

行列の行列の作り方

行列の行列の作り方

行列の行列、ベクトルの行列を作る 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