Main Content

subsasgn

添字を使用した代入

説明

A = subsasgn(A,S,B) は、A がオブジェクトである場合に構文 A(i) = BA{i} = B、または A.i = B に対して呼び出されます。

MATLAB® では、インデックス付きの代入ステートメントを組み込み関数 subsasgn を使用して解釈します。

  • A(i) = B は、B の値を添字ベクトル i で指定された A の要素に代入します。Bi と同じ数の要素をもつか、スカラー値でなければなりません。

  • A(i,j) = B は、B の値を添字ベクトル i および j で指定された A の長方形の部分行列の要素に代入します。Blength(i)length(j) 列でなければなりません。

  • A(i,:) = B または A(:,i) = B のように添字として使用されるコロンは、列全体または行全体を示します。

  • 多次元配列の場合、A(i,j,k,…) = B は、BA の指定された要素に代入します。Blength(i)×length(j)×length(k)... であるか、大きさが 1 の次元を追加または削除することでそのサイズにシフトできなければなりません。

ヒント

固定小数点の代入で A(:) = B などを使用して、いずれかの数値型の値を別の数値型にキャストできます。この添字を使用した代入ステートメントは、A の数値型を維持して B の値を A に代入します。添字を使用した代入は、整数データ型に対しても同様に機能します。

メモ

subsasgn は出力引数を指定して呼び出さなければなりません。subsasgn は、インデックス付け操作で使用されるオブジェクト (最初の引数) を変更しません。変更後のオブジェクトを取得するには、出力を代入する必要があります。

すべて折りたたむ

fi オブジェクト ab について、以下には違いがあります。

a = b

および

a(:) = b.

最初のケースの a = b では、ab に関連付けられた値、数値型、および fimath オブジェクトであると仮定して ab に置き換えます。2 番目のケースの a(:) = b では、a の数値型を維持して b の値を a に代入します。これを使用して、いずれかの numerictype オブジェクトの値を別の numerictype オブジェクトにキャストできます。

たとえば、16 ビット数を 8 ビット数にキャストします。

a = fi(0, 1, 8, 7)
a = 
     0

          DataTypeMode: Fixed-point: binary point scaling
            Signedness: Signed
            WordLength: 8
        FractionLength: 7
b = fi(pi/4, 1, 16, 15)
b = 
    0.7854

          DataTypeMode: Fixed-point: binary point scaling
            Signedness: Signed
            WordLength: 16
        FractionLength: 15
a(:) = b
a = 
    0.7891

          DataTypeMode: Fixed-point: binary point scaling
            Signedness: Signed
            WordLength: 8
        FractionLength: 7

変数 acc を定義して 40 ビットの DSP アキュムレータをエミュレートします。この例の積と和は、構文 acc(1)=... を使用してアキュムレータに代入されます。値をアキュムレータに代入することは、値をレジスタに格納することに似ています。まず、ログ モードをオンにし、変数を定義します。この例では、n は入力データ x と出力データ y の点の数、t は時間を表します。残りの変数はすべて fi オブジェクトとして定義されています。入力データ x は、低周波数正弦波に追加される高周波数正弦波です。

fipref('LoggingMode', 'on');
n = 100;
t = (0:n-1)/n;
x = fi(sin(2*pi*t) + 0.2*cos(2*pi*50*t));
b = fi([.5 .5]);
y = zeros(size(x),'like',x);
acc = fi(0.0, true, 40, 30);

次のループは、b の係数を使用して入力 x のランニング平均を求めます。acc=... を使用した場合は acc のデータ型が上書きされて変更されるのに対し、ここでは accacc(1)=... に代入していることに注目してください。

for k = 2:n
    acc(1) = b(1)*x(k);
    acc(1) = acc + b(2)*x(k-1);
    y(k) = acc;
end

サンプルを 1 つおきに平均化することで、上記のループは低周波数正弦波を通過させ、高周波数正弦波を減衰させます。

plot(t,x,'x-',t,y,'o-')
legend('input data x','output data y')

Figure contains an axes object. The axes object contains 2 objects of type line. These objects represent input data x, output data y.

ログ レポートに、ログ記録された最小値と最大値、および使用された変数の範囲が示されます。acc を上書きするのではなく代入しているため、これらのログは累積の最小値と最大値を反映したものになります。

logreport(x, y, b, acc)
                     minlog         maxlog     lowerbound     upperbound     noverflows    nunderflows
           x      -1.200012       1.197998             -2       1.999939              0              0
           y     -0.9990234      0.9990234             -2       1.999939              0              0
           b            0.5            0.5             -1      0.9999695              0              0
         acc     -0.9990234      0.9989929           -512            512              0              0

acc を表示して、そのデータ型が変わっていないことを確認します。

acc
acc = 
   -0.0941

          DataTypeMode: Fixed-point: binary point scaling
            Signedness: Signed
            WordLength: 40
        FractionLength: 30

fipref オブジェクトをリセットして既定値に戻します。

reset(fipref)

入力引数

すべて折りたたむ

インデックス付け操作で使用されるオブジェクト。スカラー、ベクトル、または多次元配列として指定します。

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical | fi
複素数のサポート: あり

インデックス付けのタイプと添字。構造体配列として指定します。S は 2 つのフィールドをもつ構造体配列です。

  • type は、添字のタイプを指定する (){}. のいずれかを含む文字ベクトルまたは string です。

  • subs は、実際の添字を含む cell 配列、文字配列、または string 配列です。

例: 構文 A(1:2,:) = Ba = subsasgn(A,S,B) を呼び出します。ここで、SS.type = '()'S.subs = {1:2, ':'} を含む 1 行 1 列の構造体です。添字として使用されているコロンは ':' として渡されます。

データ型: struct

代入される値。スカラー、ベクトル、または多次元配列として指定します。

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical | fi
複素数のサポート: あり

出力引数

すべて折りたたむ

代入ステートメントの結果。最初の引数として渡されたオブジェクトの変更後のオブジェクトです。スカラー、ベクトル、または多次元配列として返されます。

拡張機能

C/C++ コード生成
MATLAB® Coder™ を使用して C および C++ コードを生成します。

GPU コード生成
GPU Coder™ を使用して NVIDIA® GPU のための CUDA® コードを生成します。

バージョン履歴

R2006a より前に導入