12-28-2014 updated
詳細は データの作成 を参照。ここには,簡単な例のみを示しておきます。
m x n 行列から,指定した列や行だけを取り出すコマンドは以下の通りである。5 x 5 の魔法陣行列 A を使って試してみる。
>> A=magic(5);
>> A
A =
17 24 1 8 15
23 5 7 14 16
4 6 13 20 22
10 12 19 21 3
11 18 25 2 9
>> A(1,:)
ans =
17 24 1 8 15
>> A(:,1)
ans =
17
23
4
10
11
>> A(1:3,:)
ans =
17 24 1 8 15
23 5 7 14 16
4 6 13 20 22
MATLAB では,行を取り除く作業は空行列 [ ] の挿入によって行う。
>> a=magic(5)
a =
17 24 1 8 15
23 5 7 14 16
4 6 13 20 22
10 12 19 21 3
11 18 25 2 9
>> a(2,:)=[]
a =
17 24 1 8 15
4 6 13 20 22
10 12 19 21 3
11 18 25 2 9
大きい行列の方が直感的に理解しやすいと思うので,10 x 10 の魔法陣行列での例を載せてみます。
>> A=magic(10)
A =
92 99 1 8 15 67 74 51 58 40
98 80 7 14 16 73 55 57 64 41
4 81 88 20 22 54 56 63 70 47
85 87 19 21 3 60 62 69 71 28
86 93 25 2 9 61 68 75 52 34
17 24 76 83 90 42 49 26 33 65
23 5 82 89 91 48 30 32 39 66
79 6 13 95 97 29 31 38 45 72
10 12 94 96 78 35 37 44 46 53
11 18 100 77 84 36 43 50 27 59
この中で,1 行 3 列目にある 1 を 0 に置換したい場合には,以下の手順を踏む。
>> C=find(A==1); % 単に find を使うと答えが ans になってしまうので,C に代入する形をとる。
>> C
C =
21
ここで,A=1 だとエラーになる。MATLAB では = は代入を意味する演算子で,等しいことを意味しないためである。
find 関数は,() 内の条件にあてはまる位置を与える。ここでは 21 であり,これは A を左上から下に 1, 2, 3... と数えていったときの 21 番目なので,おそらくこのようにして数えているのであろう。しかし,この数え方の意味がわからなくても,
>> A(C)=0
A =
92 99 0 8 15 67 74 51 58 40
98 80 7 14 16 73 55 57 64 41
4 81 88 20 22 54 56 63 70 47
85 87 19 21 3 60 62 69 71 28
86 93 25 2 9 61 68 75 52 34
17 24 76 83 90 42 49 26 33 65
23 5 82 89 91 48 30 32 39 66
79 6 13 95 97 29 31 38 45 72
10 12 94 96 78 35 37 44 46 53
11 18 100 77 84 36 43 50 27 59
となり,0 に置換されていることがわかる。
>> A(C)=0 は,A の中の position C の要素を 0 に置換せよという意味になる。
上の作業は,
>> A(A==1)=0;
で一発で出来てしまう(2)。
>> A=normrnd(2,1,10,1)
%データの作成で使った normrnd 関数を使います。平均2,標準偏差1の正規分布の 10 x 1 行列。
A =
2.0662
2.6524
2.3271
3.0826
3.0061
1.3491
2.2571
1.0556
0.6782
2.9248
>> B=normrnd(1,1,10,1); %スペース節約のため,B は表示しないように ; を追加。
>> X=[A B] %A と B を X に合一します。
X =
2.0662 1.0000
2.6524 0.9451
2.3271 1.9111
3.0826 1.5946
3.0061 1.3502
1.3491 2.2503
2.2571 1.9298
1.0556 1.2398
0.6782 0.3096
2.9248 0.3484