MATLAB は行列を反復処理する
- MATLAB で線形インデックスを使用して行列を反復処理する
-
MATLAB で
arrayfun()
関数を使用して行列を反復処理する -
MATLAB で
cellfun()
関数を使用して行列を反復処理する
このチュートリアルでは、MATLAB の線形インデックス、arrayfun()
、および cellfun()
関数を使用して行列を反復処理する方法について説明します。
MATLAB で線形インデックスを使用して行列を反復処理する
マトリックスには、2 種類のインデックスがあります。1つは、マトリックスに存在する要素にアクセスするために行と列の番号を指定する必要がある行と列のインデックスです。2つ目は、線形インデックスのみを使用して要素にアクセスできる線形インデックスです。たとえば、以下のコードを参照してください。
m = [2 6 1; 17 19 18]
row_col_index = m(2,3)
linear_index = m(6)
出力:
m =
2 6 1
17 19 18
row_col_index =
18
linear_index =
18
上記のコードでは、両方の種類のインデックスを使用して、行列の最後の要素にアクセスします。線形インデックスでは、要素は最初の列から始まるマトリックスに存在します。したがって、最初の列から数えると、最後の要素は 6 番目のインデックスに存在します。行と列のインデックスを使用して行列を反復するには、2つのループが必要ですが、線形インデックスの場合は、1つのループのみが必要です。たとえば、線形インデックスを使用して行列を反復処理してみましょう。以下のコードを参照してください。
m = [2 6 1; 17 19 18];
for i = 1:numel(m)
disp(m(i))
end
出力:
2
17
6
19
1
18
上記では、numel()
関数を使用して、指定された行列に存在する要素の総数を取得しました。また、ループと線形インデックスを使用して、コマンドウィンドウに各要素を 1つずつ表示しました。コマンドウィンドウに要素が表示される順序に注意してください。これは、線形インデックスの順序です。
MATLAB で arrayfun()
関数を使用して行列を反復処理する
関数があり、それを配列または行列の各要素に適用する場合、そのための 1つの方法は、上記のように各要素を反復処理して各要素に関数を適用することですが、別の簡単な方法があります。arrayfun()
を使用して、指定された関数を配列または行列の各要素に適用できます。以下のコードを参照してください。
output = arrayfun(myFunction , array);
上記のコードでは、arrayfun()
が myFunction
に格納されている関数を配列の各要素に 1つずつ適用し、その結果を変数 output
に格納しています。たとえば、定義された関数を行列の各要素に適用してみましょう。以下のコードを参照してください。
myMatrix = [0 90; 180 270]
myFunction = @(x) cos(x);
output = arrayfun(myFunction , myMatrix)
出力:
myMatrix =
0 90
180 270
output =
1.0000 -0.4481
-0.5985 0.9844
出力からわかるように、関数 cos(x)
が行列の各要素に適用され、結果は変数 output
に格納されます。arrayfun()
の詳細については、このリンクを確認してください。
MATLAB で cellfun()
関数を使用して行列を反復処理する
関数があり、それを特定のセルの各要素に適用する場合、そのための 1つの方法は、上記のように各要素を反復処理して各要素に関数を適用することですが、別の簡単な方法があります。cellfun()
を使用して、指定された関数をセルの各要素に適用します。以下のコードを参照してください。
output = cellfun(myFunction , myCell);
上記のコードでは、cellfun()
が myFunction
に格納されている関数をセルの各要素に 1つずつ適用し、その結果を変数 output
に格納しています。たとえば、定義された関数をセルの各要素に適用してみましょう。以下のコードを参照してください。
myCell = {0,90,180,270}
myFunction = @(x) sin(x);
output = cellfun(myFunction , myCell)
出力:
myCell =
1×4 cell array
{[0]} {[90]} {[180]} {[270]}
output =
0 0.8940 -0.8012 -0.1760
出力からわかるように、関数 sin(x)
がセルの各要素に適用され、結果が変数 output
に格納されます。cellfun()
の詳細については、このリンクを確認してください。