MATLAB repelem() 関数

Ammar Ali 2023年6月20日
MATLAB repelem() 関数

このチュートリアルでは、MATLAB の repelem() 関数を使用した配列要素の繰り返しコピーについて説明します。

MATLAB repelem() 関数

多くの要素の配列を手動で作成すると、各配列要素を記述する必要があるため、多くの時間がかかります。 しかし、ループと Matlab のいくつかの組み込み関数を使用して、多くの要素の配列を短時間で作成できます。

repelem() 関数は、スカラーまたはベクトルを繰り返すことにより、短時間で多数の要素の配列を作成するためにも使用されます。 repelem() 関数は、配列要素のコピーを繰り返し、繰り返された要素から新しい配列または行列を作成するために使用されます。

repelem() 関数には 2つの構文があり、最初の構文を以下に示します。

output = repelem(v,n)

最初の構文は、ベクトルまたはスカラー v の繰り返し要素のベクトルを返します。 n がスカラーの場合、入力ベクトル v の値は n 回繰り返され、出力ベクトルの長さは入力ベクトルの長さに n を掛けたものに等しくなります。

n がベクトルの場合、ベクトル v の各要素はベクトル n の対応する要素に従って繰り返され、ベクトル n は入力ベクトル v と同じ長さである必要があります。 出力ベクトルの長さは、ベクトル n 要素の合計に等しくなります。

つまり、ベクトル v の最初の要素は、ベクトル n の最初の要素に従って繰り返されます。 たとえば、ベクトルを作成し、それを繰り返して 2つの新しいベクトルを作成してみましょう。

以下のコードを参照してください。

clc
clear

X = [1 2 3]
Y = repelem(X,2)
Z = repelem(X,[1 2 3])

出力:

X =

     1     2     3


Y =

     1     1     2     2     3     3


Z =

     1     2     2     3     3     3

上記のコードでは、ベクター X の各要素を 2 回繰り返して、新しいベクター Y を作成しました。 ベクトル X の最初の要素を 1 回、ベクトル X の 2 番目の要素を 2 回、3 番目の要素を 3 回繰り返して、新しいベクトル Z を作成しました。

ベクトルXの各要素がベクトルYを作成するために2回繰り返され、ベクトルZが2番目のの2番目の引数として定義されたベクトルに従って作成されたことを出力で確認できます。 repelem() 関数。

repelem() 関数の 2 番目の構文を以下に示します。

output = repelem(m,r1,...,rN)

2 番目の構文は、行列の要素を繰り返して新しい 2D または 3D の行列と配列を作成するために使用されます。 最初の引数 m は、任意の次元の入力行列または配列です。

他のすべての引数は、入力行列または配列の各要素を繰り返すために使用されるブロック サイズを設定するために使用され、入力行列の特定の次元と同じ長さのスカラーまたはベクトルにすることができます。 たとえば、repelem() 関数内の 2 番目と 3 番目の引数として 2 と 3 を渡すと、入力行列の各要素を繰り返して新しい行列に配置することにより、2 行 3 列の行列が作成されます。

つまり、入力行列の各要素は、行または最初の次元で 2 回、列または 2 番目の次元で 3 回繰り返され、新しい配列または行列が作成されます。 4 番目の引数を渡すと、入力行列の各要素が 3 次元でも繰り返され、多次元配列または行列が作成されます。

たとえば、2 行 2 列の行列を作成し、その要素を繰り返して新しい行列を作成してみましょう。 以下のコードを参照してください。

clc
clear

X = magic(2)
Y = repelem(X,2,2)

出力:

X =

     1     3
     4     2


Y =

     1     1     3     3
     1     1     3     3
     4     4     2     2
     4     4     2     2

上記のコードでは、入力行列の各要素を最初または行の次元で 2 回、2 番目または列の次元で 2 回繰り返して、新しい行列を作成しました。 出力行列のサイズは、入力ベクトルの特定の次元とブロック サイズの乗算に等しくなります。

上記の例では、入力行列のサイズが 2 行 2 列で、ブロック サイズも 2 行 2 列であるため、出力行列のサイズは 4 行 4 列になります。 出力行列の次元は、上記の例のようにブロック サイズの次元と等しくなり、ブロックには 2つの次元があり、出力行列にも 2つの次元があります。

特定の次元で要素を繰り返したくない場合は、その要素をその次元の値として渡すことができます。 たとえば、行数が同じになるように最初または行の次元で要素を繰り返したくない場合は、上記のコードで 2 番目の引数として 1 を渡すことができます。

上記の例では、各要素が両方の次元で 2 回繰り返されます。 ただし、要件に従って各要素を繰り返したい場合は、特定の要素が繰り返される回数を定義する特定の次元と同じ長さのベクトルを使用できます。

たとえば、上記の例を繰り返して、ベクトルに従って列の値のみを繰り返してみましょう。 以下のコードを参照してください。

clc
clear

X = magic(2)
Y = repelem(X,1,[3 2])

出力:

X =

     1     3
     4     2


Y =

     1     1     1     3     3
     4     4     4     2     2

上記のコードでは、入力行列の最初の列を 3 回繰り返し、2 番目の列を 2 回繰り返して、新しい行列 Y を作成しています。 上記の出力では、行を繰り返していないため、出力行列の行数が入力行列の行数と同じであり、最初の列を 3 回繰り返したため、列数が増えていることがわかります。 回と 2 番目の列は 2 回です。

この操作は、任意の次元で実行できます。 repelem() 関数を使用して、特定の次元で値を繰り返すことにより、小さなテーブルから大きなテーブルを作成することもできます。

たとえば、table() 関数を使用してテーブルを作成し、最初のテーブルの値を繰り返して別の大きなテーブルを作成してみましょう。 以下のコードを参照してください。

clc
clear

T_1 = table([19; 16],[60; 53],'VariableNames',{'Age' 'Height'})
T_2 = repelem(T_1, 2,2)

出力:

T_1 =

  2×2 table

    Age    Height
    ___    ______

    19       60
    16       53


T_2 =

  4×4 table

    Age    Age_1    Height    Height_1
    ___    _____    ______    ________

    19      19        60         60
    19      19        60         60
    16      16        53         53
    16      16        53         53

上記のコードでは、行と列のディメンションを 2 回繰り返して、より大きなテーブルを作成しました。

著者: Ammar Ali
Ammar Ali avatar Ammar Ali avatar

Hello! I am Ammar Ali, a programmer here to learn from experience, people, and docs, and create interesting and useful programming content. I mostly create content about Python, Matlab, and Microcontrollers like Arduino and PIC.

LinkedIn Facebook

関連記事 - MATLAB Array