主要内容

このページの翻訳は最新ではありません。ここをクリックして,英語の最新版を参照してください。

コンマ区切りリスト

コンマ区切りリストとは

連続する数字をコンマで区切って入力すると,“コンマ区切りリスト”を作成できます。MATLAB®では,各値が次に示すように別々に返されます。

1,2,3
Ans = 1 Ans = 2 Ans = 3

このようなリストは,これ自体ではあまり役に立つものではありません。しかし,コンマ区切りリストをMATLAB構造体や细胞配列などの大規模で複雑なデータ構造で使用すると,MATLABコードを簡易化することができます。

コンマ区切りリストの生成

この節では、细胞配列またはMATLAB構造体からコンマ区切りリストを生成する方法を述べます。

细胞配列からのリストの生成

细胞配列からから数の要素抽出して,コンマコンマ区切りリストを生できできにに示すにににますに示すようににます6にようににます6に示すようににでき6にようににでき

C =细胞(4,6);C{k} = k*2;结束C
C = [2] [10] [18] [26] [34] [42] [4] [12] [20] [28] [36] [44] [6] [14] [22] [30] [38] [46] [8] [16] [24] [32] [40] [48]

第5列を抽出して,コンマ区切りリストを生成します。

C {: 5}
Ans = 34 Ans = 36 Ans = 38 Ans = 40

これは,次のように明示的に入力するのと同じです。

C {1,5},C {2,5},C {3,5},C {4,5}

構造体からのリストの生成

構造体の場合は,次元の1つにある構造体のフィールドを抽出して,コンマ区切りリストを生成できます。

まず,上で使用した细胞配列を,f1からf6の6個のフィールドをもつ4行1列のMATLAB構造体に変換します。すべての行のフィールドf5を読み取ると,MATLABからコンマ区切りリストが返されます。

S = cell2struct (C, {“f1”“f2”‘f3’'f4''f5'“f6”2)};S.f5
Ans = 34 Ans = 36 Ans = 38 Ans = 40

これは,次のように明示的に入力するのと同じです。

(1) .f5,年代.f5 (2), (3) .f5,年代(4).f5

コンマ区切りリストからの出力の代入

コンマ区切りリストに含まれる連続した要素の一部またはすべてを,単純な代入ステートメントを使用して変数に代入できます。前の節からの细胞配列Cを使用して,最初の行を変数c1からc6に代入します。

C =细胞(4,6);C{k} = k*2;结束[c1, c2, c3, c4、c5、c6) = C {1, 1:6};c5
c5 = 34
式によって返される出力数よりも少ない数の出力変数を指定すると,MATLABでは最初のN個の出力が最初のN個の変数に代入され,残りの出力は無視されます。次の例では,C {1, 1:3}が変数c1c2c3に代入され,c {1,4:6}が削除されます。
[c1, c2, c3] = C {1, 1:6};
同じ方法で構造体の出力を代入することもできます。
S = cell2struct (C, {“f1”“f2”‘f3’'f4''f5'“f6”2)};[sf1、sf2 sf3] = S.f5;sf3
SF3 = 38.
また,関数交易を使用して同様の処理を実行することもできます。

コンマ区切りリストへの代入

コンマ区切りリストに複数の値を代入する最も簡単な方法は,関数交易を使用することです。この関数では,入力引数すべてがコンマ区切りリストの要素に分配されます。

この例では,交易まず,リストを作用成しを使して区切りリストリストの各を切りリストリストしをしししししししししししししし。

C {1} = [31 07];C {2} = [03 78];c {:}
ans = 31 7 ans = 3 78

交易を使用して,リスト内の各要素を上书きします。

[c{:}] = deal([10 20],[14 12]);c {:}
Ans = 10 20 Ans = 14 12

この例では,上記の例と同じ処理が実行されますが,構造体フィールド内のベクトルのコンマ区切りリストを使用しています。

(1)。Field1 = [31 07];(2)。Field1 = [03 78];s.field1
ans = 31 7 ans = 3 78

交易を使用して,構造体のフィールドを上書きします。

[s。Field1] = deal([10 20],[14 12]);s.field1
Ans = 10 20 Ans = 14 12

コンマ区切りリストの使用方法

コンマ区切りリストの一般的な使用方法は,次のとおりです。

次の節では、细胞配列をもつコンマ区切りリストの使用方法の例を示します。これらの例はMATLAB構造体でも使用できます。

配列作作作作者:

行列や配列を作品成するに,コンマ区切りリストを使し,一道の要素ををするますます。“リスト”を挿入する場合にはどのようなことが起こるかに注意してください。

C {: 5}を使用して要素のリストを指定すると,MATLABでは次のように4つの独立した要素が挿入されます。

一个= {“你好”,c {:,5},魔术(4)}
A = 'Hello' [34] [36] [38] [40] [4x4 double]

Cセル自体を指定すると,MATLABでは次のように细胞配列全体が挿入されます。

一个= {“你好”C魔法(4)}
A = 'Hello' {4x6 cell} [4x4 double]

配列の表示

リストを使用して,次のように构造体や细胞配列の全部または一部を表示することができます。

{:}
ans = hello ans = [2] [10] [18] [26] [34] [42] [42] [42] [图36] [第44] [第44] [第26] [第44] [第44] [第26] [第26] [第44] [第26][30] [38] [46] [8] [16] [24] [32] [40] [48] ANS = 16 2 3 13 5 11 10 8 9 7 6 12 4 14 15 1

連結

次のように,コンマ区切りリストを大かっこ内に配置すると,リストから指定した要素が抽出され,連結されます。

一个= [C {: 6}]
A = 34 36 38 40 42 44 46 48

関数呼び出しの引数

关节呼び出しコードコード,各引リストリスト,入やややこれらのます。构造体ややこれら入のます保存やにこれらこれらのがされいるいる场の,代わりされいる场いる,代わりされいるいるは,代わり代わりれいる场は,代わり代わり体や细胞配列配列函数リストのまたはまたはまたはますますます。

次の例では,関数情节に複数の属性値の引数を渡します。

x = -pi:pi / 10:pi;Y = Tan(SIN(x)) -  SIN(TAN(X));C =细胞(2,3);c {1,1} =“线宽”;C {2,} = 2;C {1,2} =“MarkerEdgeColor”;C {2,} =“k”;C {1,3} =“MarkerFaceColor”;C {2,3} =‘g’;图绘制(X, Y,“——rs”C {:})

関数の戻り値

MATLAB关节ではこれらこれらはもますにのは,各値をコンマで区切っで返されます切った返されます。配列でコンマ区切りリストをすることができます。この方法は,戻り戻りの変番を使使です。

次の例では、细胞配列に3つの値が返されます。

C =细胞(1,3);[c {:}] = fileparts(“工作/ mytest / strArrays.mat”
C = 'work/mytests' 'strArrays' '.mat' '

高速フーリエ変换の例

関数fftshiftでは,配列の各次元の左半分と右半分が入れ替えられます。[0 2 4 6 8 10]などのような简体なベクトルのの合は,出力は[6 8 10 0 2 4]になります。多次元配列の場合,関数fftshiftでは各次元で入れ替えが行われます。

関数fftshiftでは,インデックスのベクトルを使用して入れ替えを実行できます。上記のベクトルの場合は,インデックス[1 2 3 4 5 6]が並へ替えられ,新しいインデックス[4 5 6 1 2 3]になります。次にこの関数では,このインデックスベクトルを使用して要素の位置が変更されます。多次元配列の場合,fftshiftでは各次元のインデックスベクトルを作成しなければなりません。コンマ区切りリストを使用すれば、この作業はずっと簡単になります。

次に,関数fftshiftを示します。

函数y = fftshift(x) numDims = ndims(x);idx =细胞(1、numDims);k = 1:numDims m = size(x,k);p =装天花板(m / 2);Idx {k} = [p+1:m 1:p];结束y = x (idx {:});结束

この関数では、细胞配列idxにインデックスベクトルが保存されます。この细胞配列の作成は比較的簡単です。N次元ごとに,次元のサイズを決定し,中央に最も近い整数のインデックスを見つけます。次に,その次元の両半分を入れ替えるベクトルを作成します。

细胞配列を使用してインデックスベクトルとインデックス演算用のコンマ区切りリストを保存すると,fftshiftでは,y = x (idx {}):の演算1回のみで任意の次元の配列がシフトされます。明示的なインデックスを付ける場合は,次に示すように,関数で処理する次元ごとに,1つの如果ステートメントを記述しなければなりません。

如果Ndims (x) == 1 y = x(index1);其他的如果Ndims (x) == 2 y = x(index1,index2);结束结束

コンマ区切りリストを使わずに,これを处理するもう1つの方法では,各次元间をループして,1回に1つずつの次元を変换し,1回ごとにデータを移动する方法があります。コンマ区切りリストを使用すれば,1回の处理でデータを移动できます。コンマ区切りリストでは,任意数の次元の入れ替え操作が非常に简単になります。